选择在WHERE子句

时间:2016-08-25 19:01:30

标签: php mysql join where-clause

下午好,

我们说我有两张桌子。一个是带有汽车房产的桌子,第二个是带有汽车选择的桌子。我加入了两张桌子,并希望根据下面的查询选择带有重低音扬声器的汽车。如果我想选择具有重低音扬声器选项但又想显示该车与重低音扬声器一起使用的所有选项的话选项。

我遇到的问题是,当我在WHERE子句中使用如下所示的查询时,汽车选项中只显示了重低音扬声器,但我需要显示所有的汽车选项。此外,我需要使用php和html表单搜索汽车选项,因此我无法更改WHERE子句中的Car_Options.Name。任何想法如何做到这一点?

SELECT CarName,Adress,Price,Description,Car_Options.Name
FROM Cars JOIN Car_Options ON Car_Options.IdCar=CarName.IdCar
WHERE Car_Options.Name="Subwoofer"
GROUP BY CarName

3 个答案:

答案 0 :(得分:1)

您可以两次加入选项表。像这样:

SELECT c.CarName, c.Adress, c.Price, c.Description, o.Name
FROM Cars c
  JOIN Car_Options os ON Car_Options.IdCar = Cars.IdCar -- for filtering by Subwoofer
  JOIN Car_Options o ON Car_Options.IdCar = Cars.IdCar -- for full list of options
WHERE os.Name = "Subwoofer"

答案 1 :(得分:1)

SELECT
    CarName,
    Adress,
    Price,
    Description,
    GROUP_CONCAT(Car_Options) as AllOptions
FROM Cars
JOIN Car_Options ON Car_Options.IdCar = CarName.IdCar
WHERE EXISTS (SELECT 1 FROM Car_Options CO WHERE CO.IdCar = CarName.IdCar AND CO.Name = "Subwoofer")
GROUP BY CarName

我们使用Car_Options表加入Cars表,然后删除没有Subwoofer关联行的行组。我们将Car_Options连接到一个字段中。

编辑:正如Strawberry所指出的,上述查询引用了不存在的CarName表。我一直误读它是Cars.CarName。考虑到这一点,我们假设一个名为IdCar的新列:

SELECT
    IdCar,
    CarName,
    Adress,
    Price,
    Description,
    GROUP_CONCAT(Car_Options) as AllOptions
FROM Cars
JOIN Car_Options ON Car_Options.IdCar = Cars.IdCar
WHERE EXISTS (SELECT 1 FROM Car_Options CO WHERE CO.IdCar = Cars.IdCar AND CO.Name = "Subwoofer")
GROUP BY IdCar

假设每个CarName都是独特的,具有独特的IdCar。

答案 2 :(得分:0)

您的表名不一致。但你想要这样的东西:

SELECT Cars.*, Car_Options.*
FROM Cars
JOIN Car_Options ON Car_Options.IdCar = Car.IdCar
WHERE Car.IdCar IN (SELECT IdCar FROM Car_Options WHERE Name="Subwoofer")

括号内的子选择搜索带超低音扬声器的汽车。