2016-08-25 2 views
-2

Добрый день,Выбрать Включить все данные после предложения WHERE

Предположим, у меня есть две таблицы. Один из них - стол с автомобильным имуществом, а второй - стол с вариантами автомобилей. Я присоединяюсь к двум таблицам и хочу выбрать автомобиль с сабвуфером в соответствии с запросом ниже. Что делать, если я хочу выбрать автомобиль с опцией сабвуфера, но также хочу отобразить все опции, которые этот автомобиль имеет вместе с сабвуфером вариант.

Проблема заключается в том, что, когда я использую такой запрос, как ниже, с предложением WHERE, только сабвуфер отображается в вариантах автомобиля, но мне нужны все отображаемые параметры автомобиля. Также мне нужно выполнить поиск по параметрам автомобиля с помощью php и html-форм, поэтому я не могу изменить Car_Options.Name в предложении WHERE. Любые идеи, как это сделать?

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 
+2

CarName.IdCar ?? Что это? – Strawberry

+0

Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, предоставьте правильные инструкции CREATE и INSERT (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, который соответствует информации, представленной на шаге 1. – Strawberry

+0

, где две таблицы соединяются друг с другом. Это внешний ключ, который соединяет две таблицы. –

ответ

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, затем удалить группы строк, которые не имеют сабвуфер, связанный ряд. Мы объединяем Car_Options в одно поле.

EDIT: Как 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.

+1

Это предполагает (не необоснованно), что столбец carname уникален. Но таблица carname все еще не существует, что делает этот запрос бессмысленным. – Strawberry

+0

@Strawberry Oh ha .. Я даже не заметил 'CarName.IdCar'. Я продолжал читать его как «Cars.CarName». – noahnu

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

Подсекция внутри скобок ищет автомобили с сабвуферами.

Смежные вопросы