2017-10-04 56 views
0

伊夫目前有以下问题: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; 

它返回的用户名,并为他们提到的值,万一我”已经选择了正确的年份和千位,并且如果连接表中没有条目,它将返回表格帐户中的值以及所有其他值,如NULL

但是它不返回用户名,以防万一表“zeitplanung”中没有满足cafeterias(kw,year)的条目。

如何做我必须编写查询:

  • 得到第二张表中所有条目的情况下匹配项存在
  • 获得的情况下,用户名和第二表项为NULL的WHERE语句赢得”不适合。
+0

我使用的是默认的MySQL服务器,但据我所知,这样的默认querys应bouth –

+0

样本数据运行和预期结果对于一个有意义的答案会很有用, –

+0

http://i.epvpimg.com/6Qnfbab.png多数民众赞成在表的屏幕。 例如kw = 40在上面的查询中我会预期: http://i.epvpimg.com/0BmQdab.png和kw = 41的情况下我会除了bouth id | s,用户名,cnames,但是其余的数据为NULL –

回答

1

问题是您正在筛选出WHERE子句中的NULL结果。为了留住他们,移动的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; 
+0

如果不过滤NULL,那么这不意味着“内部连接”? –

+0

@WEI_DBA不,如果将条件移动到“ON”子句,如果它们不匹配,则“LEFT JOIN”将返回一个“NULL”。有了'WHERE'子句中的条件,'LEFT JOIN'仍然会返回'NULL',但是'WHERE'子句将会把它们过滤掉('JOIN'后执行'WHERE')。 – Siyual

+1

非常感谢,看起来类似于我的第一个查询:D必须检查differents 啊不同的是,你把哪里加入,havnt知道这个作品:)非常感谢 –