2011-11-07 33 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 
; 
相关问题