Mysql查询IF语句无法正常工作

时间:2018-02-20 14:32:07

标签: mysql sql

有人可以帮我解决这个问题:

SELECT
    w.aboutme,
    w.user_id,
    IF ( (SELECT db2.user_relation.id FROM db2.user_relation
          WHERE w.user_id = db2.user_relation.user_id AND
          db2.user_relation.clients_id = 1), "true", "false") as selected,
    (SELECT GROUP_CONCAT(DISTINCT name SEPARATOR ", ") FROM services
     WHERE w.user_id = w.user_id) as services
FROM websites w, db2.user_relation

如果db2.user_relation有一些记录但是如果它为空则查询返回0结果,即使网站表中有4条记录,一切正常。

如果我把IF语句拿出来,一切都会有效。所以看来我的IF语句需要一些调整。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您似乎应该从db2.user_relation子句中删除FROM

FROM websites w

您不使用其中的任何列,如果不存在任何行,则查询不会返回任何行。

答案 1 :(得分:0)

使用相关子查询以JOIN的形式编写查询要好得多。

SELECT  w.aboutme, 
        w.user_id,
        CASE WHEN u.id IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS Selected
        GROUP_CONCAT(DISTINCT name SEPARATOR ', ') as services
FROM    websites w
        LEFT JOIN db2.user_relation u
            ON  w.user_id = u.user_id 
                AND u.clients_id = 1
        LEFT JOIN services s
            ON w.user_id = s.user_id
GROUP   BY  w.aboutme, 
            w.user_id

在原始查询中,当db2.user_relation没有行时,您获得空行的原因是因为您在两个表之间执行了笛卡尔连接(CROSS JOIN),因此如果其中一个表为空,那么显然最终结果也是空的。

FROM websites w, db2.user_relationFROM websites w CROSS JOIN db2.user_relation

相同