我在MYSQL环境中有一个简单的左连接。

SELECT *
FROM (`holiday`)
LEFT JOIN `member` ON `member`.`memberId` = `holiday`.`memberId`
ORDER BY `holiday`.`begin_date` ASC

但是,如果member.memberId的第一个字符中有holiday.memberId,则它将返回所有记录,而不是只返回完全匹配的记录。
结果:
holidayId holiday.memberId member.memberId
9         1                1
9         1A65152F         1
10        1                1
10        1A65152F         1

我怎样才能让它返回精确的匹配?

最佳答案

字段holiday.memberId是一个字符串,而member.memberId是一个整数,因此MySQL会自动将字符串转换为一个数字(例如,“123ABC”将转换为123)。
你可以试试这个:

SELECT *
FROM (`holiday`)
LEFT JOIN `member` ON `member`.`memberId` = BINARY `holiday`.`memberId`
ORDER BY `holiday`.`begin_date` ASC

使用BINARY将强制进行二进制比较,禁用自动转换。
或者应该将这两个字段转换为字符串。

关于mysql - MYSQL Left Join返回与第一个字符匹配的所有行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17276149/

10-09 23:26