2012-02-18 5 views
3

私は、3つのカラム、taxon_id,scientific_name_element_id、およびparent_idのテーブルを持っています。私は子供で親ではない要素を探したいので、構造の終わりです。MySQLの「NOT IN」クエリが機能しない

私は、私が

select taxon_id 
     from taxon_name_element 
     where taxon_id not in 
          (select parent_id from taxon_name_element) 

を使用しかし、これは動作しません、私は私が実際にエントリを参照し、例えば、そこにあることがわかります空のセット、taxon_id=1を得ることが示唆されたいくつかの情報源を発見しました逆にとNO parent_id=1

私はtaxon_id年代は、PARENT_ID年代にあるものを見たとき、私は空でない結果が

私が間違って何をやっているを設定し得ますか?これをどうすれば解決できますか? PARENT_ID列を想定し

+1

[SQL NOT制約とNULL値IN]の可能複製(http://stackoverflow.com/questions/129077/sql-not-in -constraint-and-null-values) – ruakh

+0

ruakhに感謝します。私はこれを正しく理解していますか?taxon_idをNULLと比較すると、未知数が返され、未知数は未知数になります。リンクをありがとう – SimaPro

+1

はい、正確です。 '3 <> NULL'のようなものは不確定です。なぜなら、' NULL'は3つかもしれないからです。また、 '3 NOT IN(1、2、NULL)'です。 MySQLは 'WHERE'節を満たすために*知られている行だけを返します。 – ruakh

答えて

6

taxon_name_element.parent_idにはNULLがありますか?

クエリ...

select taxon_id 
from taxon_name_element 
where taxon_id not in (
    select parent_id 
    from taxon_name_element 
) 

... parent_id_Xparent_id列に現在の実際の値である...

select taxon_id 
from taxon_name_element 
where 
    taxon_id <> parent_id_1 
    AND taxon_id <> parent_id_2 
    ... 
    AND taxon_id <> parent_id_N 

...と同等です。それらのうちの1つでもNULLの場合、対応するtaxon_id <> parent_id_X式はWHERE式全体をドラッグしてNULLに「崩壊」します。

フィルターアウトのNULLあなたが望む結果を得るために:

select taxon_id 
from taxon_name_element 
where taxon_id not in (
    select parent_id 
    from taxon_name_element 
    where parent_id is not null 
) 
2

はすべてPARENT_IDための値を持たないをscientific_name_element_id選択するにはNULL(値が設定されていないという意味)

である(意味PARENT_IDがNULLである)

あなたはこれを行う:

SELECT scientific_name_element_id 
FROM YOUR_TABLE 
WHERE parent_id IS NULL 

これは、親を持たないscientific_name_element_idのリストを取得します。

+0

私はあなたがその質問を誤解しているに違いないと思います。あなたのクエリは、* parent *を持たないレコードを見つけるでしょう。 OPは*子どもがいないレコードを探したい。 (ところで、テーブルの名前は 'taxon_name_element'です。) – ruakh

関連する問題