2011-10-26 2 views
1

私はmysqlの問題があります。Table2にあり、Table1では表示されていない値を表示する

  • 表1:apple, orange, banana, kiwi, jackfruit, mango, strawberry
  • 表2:apple, orange, banana, jackfruitのは、例えば、私は次の値を持つ2つのテーブルがあるとしましょう。

    kiwi, mango, strawberry 
    

    誰もがこのためのサンプルコードを提供することができます:

私の質問は、私は唯一の値を表示/選択するクエリを作ることができる方法ですか?

答えて

0
select column from table1 where column not in (select column from table2) 
+0

'table2'の大規模なセットに対しては*極端に非効率的です。 – Phil

+0

@Phil' column'がテーブルのインデックスであっても? – Icarus

+0

ありがとうございます。次に、クエリの値をフェッチ/表示する方法はありますか? – theglove

4

オプション#1

SELECT table1.fruit FROM table1 
LEFT JOIN table2 
    ON table1.fruit = table2.fruit 
WHERE table2.fruit IS NULL 

オプション#2

SELECT table1.fruit FROM table1 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 
    WHERE table2.fruit = table1.fruit 
) 

私は、より効率的であるが、それは本当にあなたが作成したすべてのインデックスに依存しているリコールする計画を説明を参照する必要があると思います。

+0

ご回答ありがとうございます。しかし、LEFT JOINの目的は何ですか?ありがとう – theglove

+0

@thegloveそれについては、たくさんのドキュメントがあります。試してみてください。http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join – Phil

+0

列名が他の列名と同じではなく、列の値が同じ場合はどうなりますか?たとえば、table.abcとtable.zxcは異なるテーブル名を持ちますが、値の一部が一致しています。それは組み込むことが可能ですか? – theglove

関連する問題