无法在查询中获得正确的记录 - php mysql

时间:2011-10-15 12:07:16

标签: mysql join

我正在运行以下查询。

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

虽然它不应该计算在最后一行。谁能告诉我为什么?或查询的任何替代方法?

3 个答案:

答案 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 )