有人可以帮我解决这个问题:
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语句需要一些调整。
感谢您的帮助!
答案 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_relation
与FROM websites w CROSS JOIN db2.user_relation