Sql Left join返回null,即使存在匹配值
2张桌子。我匹配两个表中的列Sql Left join返回null,即使存在匹配值,sql,mariadb,Sql,Mariadb,2张桌子。我匹配两个表中的列ProductIdentifier。左表是一个包含许多记录的大表,ProductIdentifier不是唯一的,相同的值将出现多次。右表只有有限的记录,最多有1个匹配值(此列是唯一的) 我执行以下查询 select distinct `upe`.`ProductIdentifier` AS `ProductIdentifier`, `pmt`.`ProductIdentifier` AS `PMT_ID` from `prices
ProductIdentifier
。左表是一个包含许多记录的大表,ProductIdentifier不是唯一的,相同的值将出现多次。右表只有有限的记录,最多有1个匹配值(此列是唯一的)
我执行以下查询
select distinct `upe`.`ProductIdentifier` AS `ProductIdentifier`,
`pmt`.`ProductIdentifier` AS `PMT_ID`
from `prices`.`unassigned_price_entries` `upe`
left join `prices`.`product_match_table` `pmt`
on (`pmt`.`ProductIdentifier` = `upe`.`ProductIdentifier`)
where `upe`.`ProductIdentifier` like '%Brand%'
基本上,除了一件事,所有的工作都很好。结果如下:
ProductIdentifier | PMT_ID
----------------------------
Brand A | Brand A
Brand A | Brand A
Brand B | Brand B
Brand B | NULL
我不明白。很明显,它可以和B品牌相媲美,但第二次就不行了。但是,对于A.而言,如果upe.ProductIdentifier的两个值不具有相同的值,则会发生这种情况。由于各种原因,它们可能看起来相同但不同:
- 前导或尾随空格
- 字符串中隐藏的字符
- 在某些排序规则中显示相似的字符
如果您使用
其中upe.ProductIdentifier='Brand B'
,您可能只会得到其中一行(可能两行都不匹配)。我尝试了您所说的,实际上我只检索到与品牌B匹配的一行。没有出现空值的行。问题是,我已经检查了空格,或者它们是否相同。我想我得去检查隐藏的字符。感谢您为我指明了正确的方向。请使用HEX(ProductIdentifier)