2016-05-24 32 views
0

我們有一個2列表:ObjectName和ObjectColor。這是一個多對多的表格。我們有一組給定的顏色{x,y,z,...}sql比內部連接交點更好的方法

我們想要選擇存在的所有那些給定顏色的ObjectName列表。

如果我們有N種顏色,我可以想象在同一張桌子上有N-1個交叉點的sql查詢。或者我們也可以想象N-1在這張桌子上的自我加入。

有沒有更好的解決方案? 有沒有MySQL的特定解決方案?

認爲

+0

如果顏色是運行時表中的行,請了解關係分割和類似查詢。 – philipxy

回答

3

這裏有一個方法:

select objectname 
from t 
where objectcolor in (x, y, z) 
group by objectname 
having count(*) = 3; 

您需要調整列表的大小 「3」 相匹配。

+0

不錯!而對於「3」,我可以做到這一點。我認爲這個解決方案比交集或連接好得多。 你不覺得「count(*)」有時可能很貴嗎? – minchiya

+0

「COUNT(*)」需要進行表格或索引掃描,但我不知道如何避免這種情況。 –