我试图从一个表(游戏)中获取信息,并计算与第一个表中的每个条目对应的另一个表(票证)中的条目.我希望返回第一个表中的每个条目,即使第二个表中没有任何条目.我的查询如下:
SELECT g.*, count(*) FROM games g, tickets t WHERE (t.game_number = g.game_number OR NOT EXISTS (SELECT * FROM tickets t2 WHERE t2.game_number=g.game_number)) GROUP BY t.game_number;
我究竟做错了什么?
你需要做一个左连接:
SELECT g.Game_Number, g.PutColumnsHere, count(t.Game_Number) FROM games g LEFT JOIN tickets t ON g.Game_Number = t.Game_Number GROUP BY g.Game_Number, g.PutColumnsHere
或者,我认为相关子查询更清晰一些:
SELECT g.Game_Number, G.PutColumnsHere, (SELECT COUNT(*) FROM Tickets T WHERE t.Game_Number = g.Game_Number) Tickets_Count FROM Games g
只需确保检查查询计划以确认优化程序能够很好地解释这一点.