vov*_*kjn 2 sql sql-server inner-join case-sensitive
我有2个表,需要获得品牌代码的结果.
在数据库中,我有两个不同的品牌,但他们的代码是相同的(只有大小写的差异).例如:
代号名称ab Nike AB Adidas
如何内部连接代码上的2个表分别得到这2个?
在内部加入之后,我得到这个2的总和.
SELECT Code, BrandName, Count(*) QTY, SUM(Price) TOTAL
FROM A
INNER JOIN B
ON A.Code=B.Code
GROUP BY Code, BrandName
Run Code Online (Sandbox Code Playgroud)
这个查询会给我错误的结果,因为它不会敏感地加入大小写.
请帮忙 :)
由于您使用不区分大小写的排序规则并希望区分大小写尝试使用collate具有合适区分大小写的排序规则的关键字:
INNER JOIN B
ON A.Code COLLATE Latin1_General_CS_AS_KS_WS = B.Code COLLATE Latin1_General_CS_AS_KS_WS
Run Code Online (Sandbox Code Playgroud)
至少有两种快速方法可以解决此问题。
1.为 A.Code 和 B.Code 指定区分大小写的排序规则(比较字符集中字符之间的字符串的规则)。在 MySQL 和其他一些数据库管理系统中,默认排序规则不区分大小写。
也就是说,假设您使用的是 MySQL 或类似的数据库,您必须这样修改您的语句:
SELECT Code, BrandName, Count(*) QTY, SUM(Price) TOTAL
FROM A
INNER JOIN B
ON A.Code=B.Code COLLATE latin1_bin
GROUP BY Code, BrandName
Run Code Online (Sandbox Code Playgroud)
但是,如果您计划仅对 A 和 B 执行区分大小写的查询,则将这两个表的默认排序规则设置为区分大小写可能符合您的利益。
请参阅如何在 MySQL 上进行 SQL 区分大小写的字符串比较?
2.将 A.Code 和 B.Code 转换为二进制字符串并比较两者。这是逐字节比较两个字符串的简单方法,从而实现不区分大小写。
SELECT Code, BrandName, Count(*) QTY, SUM(Price) TOTAL
FROM A
INNER JOIN B
ON BINARY A.Code=B.Code
GROUP BY Code, BrandName
Run Code Online (Sandbox Code Playgroud)