MySQL查询,只返回行,如果行项目没有在其他行
问题描述:
存在
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
答
一个简单的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
答
我不知道这是否会工作在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
答
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)
行'1'中的'original_stone_id'有一个值。对? – 2012-08-11 13:37:22
@JohnTotetWoo嗨,约翰,是的。 – 2012-08-11 13:38:42
那么为什么它会在第二个示例中返回一行? :)你说你想返回'stone_free = 0'的行,并且'original_stone_id'中没有值。 – 2012-08-11 13:40:08