2016-03-23 17 views
1

どこでも検索されましたが、回答が見つかりませんでした。だから問題に。少なくとも1つの値がリストに含まれていないMySQL select id

は私がATTRが欠落している行のIDを取得するためにクエリをしたいと思い、私はこの

table1 
+------+--------+ 
| id | attr | 
+------+--------+ 
| 1 | weight | 
| 1 | width | 
| 1 | length | 
| 2 | width | 
| 2 | length | 
+------+--------+ 

のようなテーブルを持って言うことができます。 この場合、id2。

チェック対象のattrは、たとえば次のようなリストにすることができます。 ( '重量'、 '幅'、 '長さ'、 '高さ') SELECT DISTINCT attr FROM table1 WHERE id = 1。

私はNOT INとNOT EXISTSで試しましたが、0またはすべての結果しか得られません。

SELECT id FROM table1 
WHERE attr NOT IN ('weight', 'length', 'width','height') 

SELECT id 
FROM table1 t1 
WHERE NOT EXISTS 
     (
     SELECT 1 
     FROM table1 t2 
     WHERE t2.name NOT IN('weight', 'length', 'width','height') 
    ) 

EDIT

表には、私は次のことを得ることができますどのように

+------+--------+ 
| id | attr | 
+------+--------+ 
| 1 | weight | 
| 1 | width | 
| 1 | length | 
| 1 | height | 
| 2 | width | 
| 2 | length | 
| 2 | other | 
+------+--------+ 

のようなものですか?すなわち、行IDのための行方不明のattr(私はコメントで説明したように、IDだけで別名ではない主キーIDです)

+------+--------+ 
| id | attr | 
+------+--------+ 
| 2 | width | 
| 2 | length | 
+------+--------+ 
+0

それが一意でない場合は、それがID列の目的に反していることに注意する必要があります。ここで一つを用いて集約です。 –

+0

ここのIDは簡単にするためのものであり、デモンストレーションの目的で製品番号のようなものにすることができます。 –

答えて

0

これを行うには、いくつかの方法があります。

select id 
from table1 
where attr in ('weight','length','width') 
group by id 
having count(distinct attr) <> 3 
+0

ありがとうございます。まさに私が望んでいたもの! –

+0

欠けているattrを取得する方法もありますか?のような:| 2 |体重| –

+0

が編集を追加しました。そんなことをすることは可能ですか? –

0

あなたはhaving句でgroup byを使用することができ、例えば:

select id 
from table 
where attr in ('weight','width','length') 
group by id 
having count(distinct(attr)) < 3 
+0

すぐにお返事ありがとうございますが、sgeddesが速かったので、受け入れられた人は彼に行くでしょう。 –

関連する問題