下面是我正在讨论的SQL语句。我有两张桌子。其中一个表包含所有玩家,并带有唯一的id。第二个表可以包含每个玩家的多个记录。每一项记录都有某种分数,即"最高突破"。这可能在0和147之间变化。
现在,我想要的是一个SQL,它总是给我在"p._id in()"中选择的所有玩家提供分数为147的记录数,或者如果没有找到记录,则为null。
但是这个SQL会给我一个包含0条记录的结果集。但它应该给我一个包含3条记录的结果集,每条记录都有一个空值表示"breaks"。
我在这里做错了什么?
SELECT p._id player, COUNT(fp.highest_break) breaks
FROM player p LEFT OUTER JOIN frame_pos fp ON p._id = fp.player_id
WHERE fp.highest_break = 147
AND p._id IN (3,1,2)
GROUP BY p._id ORDER BY breaks DESC
Btw这是一个SQLite数据库。
试试这个:
SELECT p._id player, COUNT(fp.highest_break) breaks
FROM player p LEFT OUTER JOIN frame_pos fp ON p._id = fp.player_id
AND fp.highest_break = 147
WHERE p._id IN (3,1,2)
GROUP BY p._id ORDER BY breaks DESC
在JOIN条件下移动fp.highest_break = 147
而不是WHERE允许fp
中的行为null。。。