2009-08-17 4 views
2

特定のIDの同じ名前を持つ特定のタイプ、名前、除外エントリのエントリをSELECTしようとしています。最後の部分は頭がおかしくない難しい部分です。Mysqlクエリ特定のエントリを除外します

SELECT name FROM table WHERE type = $type AND (name is not contained in an entry with id). 

結果を、特定のタイプのものですが、現在のIDには含まれていないすべての名前のセットにします。

ここで2つのクエリを実行する必要がありますか?あるいは、私はそれを一つに凝縮することができます。

ありがとうございました。

答えて

9

あなたはこのためにサブクエリを使用することができます。

SELECT name 
FROM table 
WHERE type = $type 
AND name NOT IN (SELECT entry FROM t WHERE id = $id); 
+0

ありがとうZed、もう1つ - 私は比較する複数の "名前"がある場合はどうなりますか?名前と基準、ランクNOT IN(SELECT * FROM t ...)のようなものが動作しません。名前と基準とランクを確認したいところです – Dirk

+0

私はもっと多くのサブクエリを実行できます私はそれを1つに凝縮することができますか? – Dirk

1

を、あなたはそうのような意味でください:

SELECT name FROM table WHERE type = $type 
         AND name not in ('larry','moe','curly'). 

は、あなたのスキーマにもう少し詳細を提供してもらえますか?具体的な例が常に役立ちます。

+0

これはかなり正確にZedが与えたものです。私は複数の「名前」フィールドを持っています。 – Dirk

2

あなたがサブクエリによって、このように返された行に複数の値を比較する場合:

SELECT name FROM table 
WHERE type = $type 
AND (name, criteria, rank) NOT IN 
    (SELECT name, criteria, rank FROM t WHERE id = $id); 

あなたがリスト(name, criteria, rank)がサブクエリで選択した列に一致することを確認しなければなりません。 SELECT *は使用しないでください。

+0

私の問題を解決したThanks BillはZedの回答を受け入れなければなりませんでしたが、とにかく感謝します。 – Dirk

+0

問題はありませんが、Zedの答えはあなたの最初の質問に特有のものでした。 –

関連する問題