Iam目前正试图在左连接表上加入一个表,如下所示。 我有桌子:

  • 帐户(id,vorname,nachname)
  • projektkurse(id,accounts_id,projektwochen_id)
  • projektkurs_einzel(id,projektkurse_id)
  • projektkurs_einzel_zeiten(id,date,shift,projektkurs_einzel_id)

现在我想获得每个帐户以及他们在projektkurs_einzel_zeiten中输入的金额,这也应该是唯一的。因此,具有相同的date并且多次移位不会计为多个条目。结果也应该受到表projektkurse中的projektwochen_id列的限制。此列应匹配特定值,例如8。

Some Accounts在projektkurse,projektkurs_einzel和projektkurs_einzel_zeiten中没有任何条目,这就是为什么我的第一个想法是使用LEFT JOIN这样:

SELECT accounts.id, accounts.vorname, accounts.nachname, COUNT(DISTINCT projektkurs_einzel_zeiten.date, projektkurs_einzel_zeiten.shift) AS T
FROM accounts
LEFT JOIN projektkurse on accounts.id = projektkurse.creator_id
LEFT JOIN projektkurs_einzel on projektkurse.id = projektkurs_einzel.projektkurs_id
LEFT JOIN projektkurs_einzel_zeiten ON projektkurs_einzel.id = projektkurs_einzel_zeiten.projektkurs_einzel_id
WHERE projektkurse.projektwochen_id = 8
GROUP BY accounts.id

此查询无法完全达到我想要的效果。它只返回在projektkurse中至少有一个条目的帐户,即使它们在projektkurs_einzel和projektkurs_einzel_zeiten中没有。对于他们来说,The Count显然为0,但是在projektkurse中没有条目的帐户将被完全忽略。 如何在Count 0中显示任何其他表中没有条目的帐户?

分析解答

您不应该在where where condition作为内连接使用左连接表列

您应该在相应的ON子句中移动左连接表的where条件

SELECT accounts.id, accounts.vorname, accounts.nachname, COUNT(DISTINCT projektkurs_einzel_zeiten.date, projektkurs_einzel_zeiten.shift) AS T
FROM accounts
LEFT JOIN projektkurse on accounts.id = projektkurse.creator_id 
                          AND projektkurse.projektwochen_id = 8
LEFT JOIN projektkurs_einzel on projektkurse.id = projektkurs_einzel.projektkurs_id
LEFT JOIN projektkurs_einzel_zeiten ON projektkurs_einzel.id = projektkurs_einzel_zeiten.projektkurs_einzel_id
GROUP BY accounts.id