MySQL IF函数无法识别带整数的字符

时间:2013-08-21 22:11:55

标签: mysql

我遇到的问题是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函数中做错了吗?

1 个答案:

答案 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标准条件语句。