2012-08-11 71 views
0
存在
 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,因此查询不应返回任何行。MySQL查询,只返回行,如果行项目没有在其他行

在下面第1行的例子有stone_free为0,但有其它行有没有相应的original_stone_id,因此,查询应返回行1

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

行'1'中的'original_stone_id'有一个值。对? – 2012-08-11 13:37:22

+0

@JohnTotetWoo嗨,约翰,是的。 – 2012-08-11 13:38:42

+0

那么为什么它会在第二个示例中返回一行? :)你说你想返回'stone_free = 0'的行,并且'original_stone_id'中没有值。 – 2012-08-11 13:40:08

回答

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

+0

你是明星!非常感谢。 – 2012-08-11 13:52:35

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