2011-10-18 21 views
2

SQLクエリに問題があります。値が存在しない場合はレコードを検索しますか?

recordsテーブルにStatusID = 1があります。IF StatusID = 2が存在しません。

は、私は、クエリを試してみました:

SELECT * FROM records AS A 
    LEFT JOIN records AS B on B.StoreID = A.StoreID 
WHERE A.StatusID = 1 AND B.StatusID != 2 

は、それはまだStatusID = 2が存在する場合でも、結果を示しています。

注:StoreIDは、レコードテーブルのref idです。

+0

私はそれを取得しません。あなたはそれを言い換えることができますか? – MarianP

+0

@MarianP 'records'テーブルで' StatusID = 1'を検索する 'StatusID = 2'がテーブルに存在しない場合 –

+0

StoreIdは一意ではありませんか? – MarianP

答えて

7

あなたはNOT EXISTSを使用したい:

SELECT * 
FROM records AS A 
WHERE A.StatusID = 1 
AND NOT EXISTS (select B.StoreID 
       from records AS B 
       where B.StoreID = A.StoreIDB 
       and B.StatusID = 2) 
0

null以外StatusIDフィールド(常にで満たされている)Assumming:あなたはまだStatusID = 2が存在する場合でも、結果を見ている

SELECT * FROM records AS A 
    LEFT JOIN records AS B 
    on B.StoreID = A.StoreID 
    and B.StatusID = 2 
WHERE A.StatusID = 1 AND B.StatusID IS NULL 
0

LEFT JOINを使用しているので、左セット全体と一致するすべてのエントリを右セットから、またはNULLが存在しない場所から返します。

最も簡単な修正は例のためにLEFT JOININNER JOINは、StatusIDは、このように1や2

もないに等しくなりませんことを返しますので、ちょうど、INNER JOINを使用することであるように思える:

select * from records a 
inner join records b 
on b.storeid = a.storeid 
where a.statusid = 1 
and b.statusid <> 2 
関連する問題