我正在运行以下查询。
SELECT *
FROM exam, result
WHERE exam.home = result.external_id
AND exam.away != result.external_id;
考试表中的记录:
home away
51156 8
51158 7
51158 51182
结果表中的记录:
external_id
51156
51158
51182
在正常情况下,应该获取前两个记录。现在当我独立使用'!='时,它会毫无问题地执行。意思是,当我执行
时SELECT * FROM exam, result WHERE exam.away != result.external_id
它正确执行。这是结果。
home away
51156 8
51158 7
但是,在我上面提到的错误查询中,输出如下:
id home away
111 51156 8
100 51158 7
123 51158 51182
虽然它不应该计算在最后一行。谁能告诉我为什么?或查询的任何替代方法?
答案 0 :(得分:1)
据我了解,您正在查找表away
中列result
上没有ID的记录。
如果是这种情况,那么此查询将生成您想要的结果:
SELECT *
FROM exam
WHERE home IN (SELECT external_id FROM result)
AND away NOT IN (SELECT external_id FROM result)
答案 1 :(得分:0)
试试这个:
SELECT e.home,e.away,r.external_id
FROM exam e join result r on r.external_id = e.home and e.away != r.external_id
where e.away not in (select r.external_id from result r)
答案 2 :(得分:0)
SELECT *
FROM exam
WHERE home IN (SELECT external_id FROM result WHERE exam.home = result.external_id)
AND away IN (SELECT external_id FROM result WHERE exam.away!= result.external_id )