我在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/