Sql Left join返回null,即使存在匹配值

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

2张桌子。我匹配两个表中的列
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)