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,因此查询不应返回任何行。

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

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

3 回答 3

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

演示在这里

于 2012-08-11T13:47:46.397 回答
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
于 2012-08-11T13:46:31.047 回答
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)
于 2012-08-11T13:49:28.967 回答