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