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 で、対応する original_stone_id が行 3 にあるため、クエリは行を返しません。

以下の例では、行 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 に答える