您需要在bin到指定對陣雙方subsqueries,並作爲你實際上會說紅色和綠色的小船(而小船隻能是一種顏色)你想要紅色或綠色的預留者,所以OR在這裏是合適的。
select sid from reserves where
bid in (select bid from boats where color='red')
OR
bid in (select bid from boats where color='green') ;
但更有效的方式來做到這一點並不用兩個子查詢,但與聯接:
SELECT sid FROM reserves AS r
LEFT JOIN Boats as b ON r.bid = b.bid
WHERE b.color IN ('red', 'green')
如果你只想要列表包含不可複製的SID,你可以使用如下:
SELECT distinct(sid) FROM reserves AS r
LEFT JOIN Boats as b ON r.bid = b.bid
WHERE b.color IN ('red', 'green')
或
SELECT sid FROM reserves AS r
LEFT JOIN Boats as b ON r.bid = b.bid
WHERE b.color IN ('red', 'green')
GROUP BY sid
我曾與GROUP BY的上真正的大表效率VS DISTINCT(40GB +)
UPDATE混經驗:當我想念理解你前面的問題這也許是更合適的解決方案:
SELECT sid FROM reserves AS r
LEFT JOIN Boats as b ON r.bid = b.bid
GROUP BY sid
HAVING sum(b.color = 'red') and sum(b.color= 'green')
這裏我們正在加入表格,然後按照SID對行進行分組。使用having子句,我們計算b.color ='red'(和'green')上布爾檢查的總和,如果你沒有任何紅色(或綠色)出價船,並且通過這些總和將爲零一起你知道紅色> 1和總和(綠色)> 1。
而一個sqlfiddle讓你玩:http://sqlfiddle.com/#!2/b5ec1/8
不錯,如果船隻包含多次出價,這項工作。我懷疑OP的意思,但因爲我們不知道... – luksch
這不工作:( – Yuvi
然後請重新提出問題,並在更多的細節,所以我們可以瞭解您的數據。 – ModulusJoe