SQL - 左外连接似乎不起作用

时间:2014-09-01 08:55:57

标签: sql sqlite

以下是我正在讨论的SQL语句。 我有两张桌子。一个包含所有玩家,拥有它唯一的ID。第二个表可以包含每个玩家多个记录。每条记录都有某种分数,即最高分数"。这可以在0到147之间变化。

现在我想要的是一个SQL总是给我所有选中的玩家" p._id IN()"如果找不到记录,则找到记录的计数为147,如果没有找到记录,则为null。

但是这个SQL会给我一个包含0条记录的结果集。但是它应该给我一个包含3条记录的结果集,每条记录都有一个空值,用于"休息"。

我在这里做错了什么?

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

顺便说一下:它是一个SQLite数据库。

1 个答案:

答案 0 :(得分:0)

试试这个:

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条件而不是WHERE上移动fp.highest_break = 147允许fp中的行为空...