Mysql SQL左联接左联接表上的表
Iam当前正在尝试按如下方式在左联接的表上左联接一个表。 我有以下表格:Mysql SQL左联接左联接表上的表,mysql,sql,Mysql,Sql,Iam当前正在尝试按如下方式在左联接的表上左联接一个表。 我有以下表格: 帐户(id、vorname、nachname) 项目编号(id、账户编号、项目编号) projektkurs_einzel(id,projektkurse_id) 项目编号、日期、班次、项目编号 现在,我想获得每个帐户以及它们在projektkurs_einzel_zeiten中的条目的次数,这也应该是唯一的。因此,多次使用相同的日期和班次不算作多个条目。结果还应受到表projektkurse中projektwoche
- 帐户(id、vorname、nachname)
- 项目编号(id、账户编号、项目编号)
- projektkurs_einzel(id,projektkurse_id)
- 项目编号、日期、班次、项目编号
SELECT a.id, a.vorname, a.nachname,
COUNT(DISTINCT pez.date, pez.shift) AS T
FROM accounts a LEFT JOIN
projektkurse
ON a.id = pk.creator_id AND
pk.projektwochen_id = 8 LEFT JOIN
projektkurs_einzel pe
ON pk.id = pe.projektkurs_id LEFT JOIN
projektkurs_einzel_zeiten pez
ON pe.id = pez.projektkurs_einzel_id
GROUP BY a.id, a.vorname, a.nachname;
选择accounts.id、accounts.vorname、accounts.nachname、COUNT(不同的projektkurs\u einzel\u zeiten.date、projektkurs\u einzel\u zeiten.shift)作为T
来自帐户
在accounts.id=projektkurse.creator\u id上左加入projektkurse
在projektkurse.id=projektkurs\u einzel.projektkurs\u id上左连接projektkurs\u einzel
左连接projektkurs_einzel_zeiten ON projektkurs_einzel.id=projektkurs_einzel_zeiten.projektkurs_einzel_id
其中projektkurse.projektwochen_id=8
按帐户分组。id
这个查询并不能完全实现我想要的。它只返回在projektkurse中至少有一个条目的帐户,即使它们在projektkurs_einzel和projektkurs_einzel_zeiten中没有条目。对于他们来说,计数显然是0,但是在projektkurse中没有条目的帐户将被完全忽略。
我怎样才能同时显示在任何其他表中也没有计数为0的条目的帐户?您不应该使用eft join表的列ins,其中该条件用作内部联接 应该在相应的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
我建议您这样编写查询:
SELECT a.id, a.vorname, a.nachname,
COUNT(DISTINCT pez.date, pez.shift) AS T
FROM accounts a LEFT JOIN
projektkurse
ON a.id = pk.creator_id AND
pk.projektwochen_id = 8 LEFT JOIN
projektkurs_einzel pe
ON pk.id = pe.projektkurs_id LEFT JOIN
projektkurs_einzel_zeiten pez
ON pe.id = pez.projektkurs_einzel_id
GROUP BY a.id, a.vorname, a.nachname;
注:
- 通过将
条件移动到WHERE
子句,可以解决您的问题。您的ON
将外部联接转换为内部联接,因为WHERE
值不匹配NULL
- 表别名使查询更易于编写和读取
- 最佳做法是将所有未聚合列包含在
分组依据中。但是,假设
是唯一的,那么您的公式就可以了(由于所谓的“函数依赖性”)id