SQL左连接选择第一个表一次

时间:2017-10-04 19:33:22

标签: mysql sql

我目前遇到以下问题:

我有一个MySQL查询:

SELECT account.id as id, `cname`, `username`, `state`, `dow` 
FROM account 
LEFT JOIN zeitplanung 
ON account.id = zeitplanung.user_id 
WHERE account.hide = 0 
and ifnull(zeitplanung.kw,43) = 43 
and ifnull(zeitplanung.year, 2017) = 2017;

如果我选择了正确的年份和kw,它返回用户名和提到的值,如果联接表中没有条目,则返回表帐户中的值,以及所有其他值值为NULL

但它不返回用户名,以防表中有条目" zeitplanung"哪个不符合自助餐厅(kw,year)。

如何将该查询写入:

  • 获取第二个表中的所有条目,以防匹配条目存在
  • 在WHERE语句不适合的情况下,将用户名和第二个表条目设为NULL。

1 个答案:

答案 0 :(得分:1)

问题是您在NULL子句中过滤掉WHERE结果。要保留它们,请将OUTER表的任何过滤条件移到其ON子句:

SELECT account.id as id, `cname`, `username`, `state`, `dow` 
FROM account 
LEFT JOIN zeitplanung 
ON account.id = zeitplanung.user_id 
AND zeitplanung.kw = 43
AND zeitplanung.year = 2017
WHERE account.hide = 0;