2015-06-07 62 views
0

我有兩個表?一對多的關係,選擇值

**object** 
object_id|name 
1| one 
2| two 
3| three 

**colors** 
object_id|color_name 
1| red 
1| white 
2| red 
3| white 

如何選擇所有的object_id其中COLOR_NAME等於紅色白,不紅或白, 這樣

`Select object_id 
    From colors 
    WHERE color_name='red' AND color_name='white'` 

但廢話..

+0

該查詢選擇行。一行不能同時出現紅色和白色。它只有一種顏色。請提供一些您希望查詢執行的示例輸出。 – rghome

+0

感謝您的回答! 我想使用PHP爲我的網站創建過濾器。當我檢查例如多個複選框顏色的紅色和白色,我點擊篩選和過濾器應顯示對象之一。 – fiphiker

回答

1

嘗試像下面使用GROUP BY條款:

select object_id 
from colors 
where color_name in ('red','white') 
group by object_id 
having count(distinct color_name) >= 2 

然後如果你想,你可以JOIN這個結果集與object表類似

select o.object_id, o.name 
from object o join (
    select object_id 
    from colors 
    where color_name in ('red','white') 
    group by object_id 
    having count(distinct color_name) >= 2 
) tab on o.object_id = tab.object_id 
+0

偉大的解決方案,感謝您的幫助! 如果我想檢查三種顏色,我應該寫有count(distinct color_name)> = 3? – fiphiker

+0

是,並在WHERE條件中包含第三個顏色名稱 – Rahul