加入2个表区大小写敏感的大小写

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)

这个查询会给我错误的结果,因为它不会敏感地加入大小写.

请帮忙 :)

jpw*_*jpw 7

由于您使用不区分大小写的排序规则并希望区分大小写尝试使用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)

  • 我不确定你是否需要在连接的两边指定排序规则 - 它可能就足够了`ON A.Code = B.Code COLLATE Latin1_General_CS_AS_KS_WS` (3认同)

tet*_*isd 5

至少有两种快速方法可以解决此问题。

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)