Select 包含 WHERE 子句后的所有数据

Select Include all data after WHERE clause

下午好,

假设我有两个 table。一辆是 table 车 属性,第二辆是 table 车。我加入了两个 table 并且想要 select 根据查询 below.What 有低音炮的汽车如果我想 select 有低音炮选项的汽车但是还想显示这辆车的所有选项以及低音炮选项。

我遇到的问题是,当我使用如下带有 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

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

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"

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

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")

括号内的sub-select搜索带低音炮的汽车

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

我们将 Cars table 与 Car_Options table 连接起来,然后删除没有与 Subwoofer 关联的行的行组。我们将 Car_Options 连接成一个字段。

编辑: 正如 Strawberry 所指出的,上述查询引用了不存在的 CarName table。我一直误读它是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。