给定一个名为 Answers 的(简化)表,例如
Id Person Answer Priority
1 Tom France Low
2 Tom Germany High
3 Fred England Low
4 Amy Italy High
我想编写一个 SQL 查询,每人返回一行,表示他们的最高优先级答案。我的想法是使用自加入
SELECT *
FROM Answers aLow
LEFT OUTER JOIN Answers aHigh
ON aLow.Person = aHigh.Person
AND aLow.Priority = 'Low'
AND aHigh.Priority = 'High'
然后在代码中检查哪些优先级列是非空的,但这会为汤姆返回一个额外的行
Id Person Answer Priority Id Person Answer Priority
1 Tom France Low 2 Tom Germany High
2 Tom Germany High NULL NULL NULL NULL
3 Fred England Low NULL NULL NULL NULL
4 Amy Italy High NULL NULL NULL NULL
使用这种方法,所需的输出将是
Id Person Answer Priority Id Person Answer Priority
1 Tom France Low 2 Tom Germany High
3 Fred England Low NULL NULL NULL NULL
4 Amy Italy High NULL NULL NULL NULL
我确定我一定遗漏了一些简单的东西,但不能指望它。
我错过了什么?有没有更好的方法来解决这个问题?