2012-01-12 6 views
0
category item 
red   pen 
red   ball 
blue  kite 
blue  toy 
shiny  pen 

私は赤または青のすべてのアイテムを手に入れたいと思います。ここでmysql where文

は私のクエリは、これまで

SELECT DISTINCT item FROM mytable WHERE category IN ("red","blue") 

ですこれは赤と青のすべてのアイテムを取得するが、どのように私はアイテムもピカピカでなければならないことを指定することができますか? IN文に光沢を加えても、青の項目はすべて返されます。青いアイテムはデータベース内に光沢のあるエントリがないため除外する必要があります。

私の例では、ペンだけが返されます。どんな助けも非常に高く評価されるでしょう。

+0

あなた自身で解決していない場合は、下記の私の答えをチェックしてヒントと解決策を確認してください:) – Tom

答えて

0

テーブルサイズを大きく受けるときに、非常に遅い参加。テーブルの正規化を検討する必要があります。

1

これは動作するはず:

select item from mytable where category = "red" or item = "blue" 
intersect 
select item from mytable where category = "shiny"; 

まず赤または青の要素の集合を作成選択し、第二は、すべての光沢のある要素のセットを作る選択。あなたは2つのセットにいる人だけを保持したいので、あなたはちょうど2つのセットの間の交差点を作っている。

http://sql.1keydata.com/fr/sql-intersect.php

1

あなたは自分自身に、テーブルを結合する必要があります。あなたは自分のテーブルに参加しませんが、その自己を覚えておく必要が

SELECT DISTINCT mytable1.item FROM mytable mytable1 
INNER JOIN mytable mytable2 ON mytable1.item=mytable2.item 
WHERE mytable1.category IN ("red","blue") AND mytable2.category="shiny" 
1
select 
     mt.item 
    from 
     MyTable mt 
    group by 
     mt.item 
    having 
      sum(if(mt.category = "shiny", 1, 0)) = 1 
     and sum(if(mt.category in ("red", "blue"), 1, 0)) > 0