我遇到的问题是MySQL中的IF函数没有正确告诉我ID是否位于第二个表中。您可以在这里查看我正在做的事情
http://sqlfiddle.com/#!2/501513/4“
SELECT c.id AS clientID, IF (e.id, 'yes', 'no') AS hasID
FROM Table1 c LEFT JOIN Table2 e ON (c.id = e.id)
WHERE c.id IN ("123456","H100512","94061","OW59556","OR37615");
如果您注意到值“H100512”和“w76789”都应该说“是”而不是“否”,因为它们可以在第二个表中找到。我注意到,如果我从查询和表格中的id中删除了该字母,那么它将正确地说明它是否存在于表格中。我在IF函数中做错了吗?
答案 0 :(得分:3)
当然,我认为最好将id
声明为varchar()
并使用单引号而不是双引号来分隔字符串。但是,这些都不是导致问题的原因。
问题在于声明:
if(e.id, 'yes', 'no')
在MySQL中,这是在检查:
if(e.id <> 0, 'yes', 'no')
您可能认为它正在检查NULL
。不。所以,正在发生的事情是像'H100512'
这样的字符串正在被转换为整数 - 并且它被转换为0
而未通过测试。
我认为您应该将查询编写为:
SELECT c.id AS clientID,
(case when e.id is not null then 'yes' else 'no' end) AS hasID
FROM Table1 c LEFT JOIN
Table2 e
ON c.id = e.id
WHERE c.id IN ('123456', 'H100512', '94061', 'OW59556', 'OR37615', 'w76789');
这是明确的,它使用ANSI标准条件语句。