2011-11-07 35 views
0

假設我有兩個表'car'和'properties',它們通過表'car_properties'鏈接。我可以選擇有說所有的車,電動窗OR收音機OR兩者做類似下面的...只有在所有指定條件都爲真的情況下SQL才能連接表

SELECT cars.id 
FROM cars 
JOIN car_properties 
    ON cars.id = car_properties.car_id 
WHERE 
    car_properties.property_id = 1 
    OR car_properties.property_id = 2 

其中「電動窗」的PROPERTY_ID是「1」和'汽車收音機'將是'2'。

但是,我真正想要做的是選擇只有汽車有兩個屬性(不只是一個或另一個或兩個)。

我懷疑這很簡單,但最有效的方法是什麼?

+0

請格式化你的SQL代碼。不要把整件事放在一個長長的隊伍中。 – ObscureRobot

+1

你會發現這裏的確切情況的答案很多:http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation/7774879# 7774879 –

+0

你的問題表明你的car_properties表的結構是car_properties {property_id,value}。如果是這種情況,您可能會發現重新設計這個選項是可取的,這樣每個唯一屬性(屬性ID)就是一個單獨的列。它會幫助你避免這種情況。 – Carth

回答

2

JOIN兩次:

SELECT cars.id 
    FROM cars 
    JOIN car_properties AS cp1 
    ON cp1.car_id = cars.id 
    AND cp1.property_id = 1 
    JOIN car_properties AS cp2 
    ON cp2.car_id = cars.id 
    AND cp2.property_id = 2 
; 
相關問題