2017-01-23 15 views
1

私は以前にここに質問を投稿しました:Mysql query with joined tables problems しかし、私はそれが私に頭痛を与える部分を示すためにそれを分解すると思った、私はこの質問に素早く答えを出すかもしれません。もし私がこれを解決できれば、以前の問題も解決できます。mysqlの簡単なクエリの種類はありませんが、それを解決できません

値はitem_idを参照している、と私は「は( 『良い」OR『悪い』)AND』速い

のでitem_id 1でなければなりませんitem_id項目は()を参照しているs」を取得したいですそれは良いと高速ですので、記載されています item_id 2それは高速ではないので、リストされるべきではありません。私はこの

id item_id value 
1  1  'good' 
2  1  'fast' 

3  2  'good' 
4  2  'slow' 

5  3  'good' 
6  3  'slow' 

7  4  'bad' 
8  4  'slow' 

9  5  'bad' 
10  5  'fast' 

11  6  'moderate' 
12  6  'fast' 

のようなテーブルを持っている場合

私は

item_id 
    1 
    5 

を取得したい結果が誰かが私を助けることができますか?

答えて

1

一つの方法は次のとおりです。あなたは、アイテムごとの声明をしたいので、あなたはアイテムにより集約し、グループ。条件はHAVING句にあります。ヌルで

select item_id 
from mytable 
group by item_id 
having count(case when value = 'fast' then 1 end) >= 1 
    and count(case when value in ('good','bad') then 1 end) >= 1; 

(あなたはまた、sum(case when value = 'fast' then 1 else 0 end) >= 1またはmax(case when value = 'fast' then 1 else 0 end) = 1またはそれらの線に沿っていくつかの表現を使用することができます。nullではないCOUNT(expression)カウント式。私はELSEブランチを省略していますように、非一致するレコードの結果とこれではありません。。カウントいくつかは、いくつかのCOUNT好む、SUM好む - それは最終的には個人の好みの問題です)

+0

これは動作しています!どうもありがとうございます !!! – Ninet9

+0

私はなぜ書くことができないのか説明することができます:HAVING value IN( 'fast')とIN value( 'good'、 'bad')? mysql sais:値欄にhaving句があります。それはカウントを持っていることが重要なのですか?私はちょうどそれが何千もの値を持つDBで長時間かかる場合心配しています – Ninet9

+0

@ Ninet9:アイテムごとのレコードを集計しています( 'group by item_id')。その集計の後では、項目ごとに1つの値が存在しないので、 'item_id'と集計(合計、数、最大、平均、...)にアクセスできますが、' value'ではアクセスできません。話している? –

1

これを行う1つの方法は、EXISTSクエリです。

ここでは例です:これを見るために

select t1.item_id 
from your_table t1 
where t1.value = 'fast' 
and exists (
    select NULL 
    from your_table t2 
    where t2.item_id = t1.item_id 
    and t2.value in ('good','bad') 
); 
+0

よく見えますが、戻ったらすぐにチェックします – Ninet9

1

アイテムが良いか悪いことができることを考えると、両方ではなく、私が使用する簡単な方法:

select item_id your_table 
where value in ('good','bad','fast') 
group by item_id 
having count(*) = 2 
そのような場合は、

の数は常に2にする必要があります。

+0

私はあなたに教えてくれませんでしたが、私は各プロパティの種類のためのより多くの条件を持つ必要があるため、高速から悪い、良いを分離する必要があります。私のテーブルは私がここに提示したものよりもはるかに複雑である – Ninet9

+0

しかし、そのアイデアは良かったです: - )良いものと悪いものが互いに排他的であるため、2つの数は良いか悪いかを意味していました。いい考え。 –

+0

はい、アイデアも好きです。非常に素晴らしい。マリアーノありがとう – Ninet9

関連する問題