我們有一個2列表:ObjectName和ObjectColor。這是一個多對多的表格。我們有一組給定的顏色{x,y,z,...}sql比內部連接交點更好的方法
我們想要選擇存在的所有那些給定顏色的ObjectName列表。
如果我們有N種顏色,我可以想象在同一張桌子上有N-1個交叉點的sql查詢。或者我們也可以想象N-1在這張桌子上的自我加入。
有沒有更好的解決方案? 有沒有MySQL的特定解決方案?
認爲
我們有一個2列表:ObjectName和ObjectColor。這是一個多對多的表格。我們有一組給定的顏色{x,y,z,...}sql比內部連接交點更好的方法
我們想要選擇存在的所有那些給定顏色的ObjectName列表。
如果我們有N種顏色,我可以想象在同一張桌子上有N-1個交叉點的sql查詢。或者我們也可以想象N-1在這張桌子上的自我加入。
有沒有更好的解決方案? 有沒有MySQL的特定解決方案?
認爲
這裏有一個方法:
select objectname
from t
where objectcolor in (x, y, z)
group by objectname
having count(*) = 3;
您需要調整列表的大小 「3」 相匹配。
不錯!而對於「3」,我可以做到這一點。我認爲這個解決方案比交集或連接好得多。 你不覺得「count(*)」有時可能很貴嗎? – minchiya
「COUNT(*)」需要進行表格或索引掃描,但我不知道如何避免這種情況。 –
如果顏色是運行時表中的行,請了解關係分割和類似查詢。 – philipxy