2012-08-11 2 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가 있으므로 쿼리가 어떤 행도 반환하지 않아야합니다. 1 행 아래의 예에서 MySQL의 쿼리 만 행 항목이 다른 행

0으로 stone_free을 가지고 있지만 다른 행에 해당하는 original_stone_id가 없기 때문에 쿼리가 행 반환해야합니다 1.

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

'1' 행에 'original_stone_id'값이 있습니다. 권리? –

+0

@ JohnTotetWoo 안녕하세요, John 있습니다. –

+0

두 번째 예제에서 행을 반환하는 이유는 무엇입니까? :) 당신은'stone_free = 0'과'original_stone_id'에 값이없는 행을 반환하기를 원한다고 말했습니다. –

답변

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

당신은 스타입니다!, 많은 감사합니다. –

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)