MySQL对行进行查询,只有在其他行中不存在行项时才返回行

时间:2012-08-11 13:32:36

标签: mysql sql

     ID      stone_free    original_stone_id
   ------- | ---------- | -------------------
     1     |     0      |         1
     2     |     1      |         2
     3     |     1      |         1

我希望 stone_free等于0 时,返回行,并且每行的其他行中没有对应的original_stone_id 。因此,例如在上面的示例中,第1行的stone_free为0,第3行中有相应的original_stone_id,因此查询不应返回任何行。

在下面的示例中,第1行的stone_free为0,但另一行中没有对应的original_stone_id,因此查询应返回第1行。

     ID      stone_free    original_stone_id
   ------- | ---------- |  -------------------
     1     |     0      |         1
     2     |     1      |         2

3 个答案:

答案 0 :(得分:2)

一个简单的LEFT JOIN应该这样做;

SELECT a.* 
FROM Stones a
LEFT JOIN Stones b ON a.ID<>b.ID AND a.original_stone_id = b.original_stone_id
WHERE b.ID IS NULL AND a.stone_free=0

演示here

答案 1 :(得分:1)

我不确定它是否可以在MySQL上运行但是给它一个机会

select  * 
from tbl
where   stone_free = 0 and
     ( 
    select count(tab.original_stone_id) 
    from tbl tab 
    where tab.original_stone_id = tbl.original_stone_id
     ) = 1

答案 2 :(得分:1)

Select * from tablename t1
Where stone_free = 0
And Not Exists (Select Id from tablename t2 where t2.original_stone_id = t1.original_stone_id And t2.Id <> t1.Id)