2016-11-17 11 views
-1

人(person_id、person_name、street_name、...)、市区町村(district_id、district_name、...)、地区-streets 1-N pairs(district_id、street_name)。私は、特定の地区(T-SQL環境)に住んでいない人を選択したいと思います。SQL効率的な方法を実装していない

SELECT P.Person_id 
    FROM persons P 
    JOIN Districts D on D.Name='1. district' 
    JOIN Districts_Streets S on S.District_ID=D.District_ID 
    WHERE ???? 
+2

pとdの間に結合条件はありませんか? – jarlh

+1

_efficient_のメトリックは何ですか?クエリの中で最も少ない文字は? I/Oの最小化? ... – HABO

+0

@HABO実行時間が重要なポイントです。 –

答えて

4

<>あなたは何をしますか?

SELECT P.Person_id 
FROM persons P JOIN 
    Districts_Streets S 
    ON P.street_name = S.street_name JOIN 
    Districts D 
    ON S.District_ID = D.District_ID 
WHERE D.Name <> '1. district'; 

ジョインを正しく設定する必要があります。

+0

別の解決策がある:人P 左から SELECT P.PersonID地区D ON D.District_ID = S.District_ID D.Name <> 1 'JOIN Districts_Streets S INNER FROM S.Street_Nameを選択( をJOIN。地区 ")L ON L.Street_Name = P.Street_Name L.Street_NameはNULLです –

+0

質問:これはT-SQL環境で最も効率的です... –

+0

@ZoltanHernyak。 。 。あなたはなぜこのような単純なロジックにLEFT JOINを使用しますか? –