У меня есть три таблицы, из которых мне нужна информация. Я пытаюсь получить номерные знаки для определенных автомобилей, которые во многом соответствуют некоторым рекомендациям.
Правила следующие: Автомобили, на которые не поступили заказы от клиентов из города x. Автомобили, для которых нет бронирований из таблицы БРОНИРОВАНИЕ.
Буду признателен за любую помощь, которую я могу получить.
SELECT DISTINCT f.licenseplateNo, Model FROM Car c
JOIN Booking b
ON c.licenseplateNo = b.licenseplateNo
JOIN Customer c
ON c.customerID = b.customerID
WHERE c.Ort <> 'cityname'
ORDER BY licenseplateNo ASC
SELECT f.licenseplateNo, Model FROM Cars c
WHERE NOT EXISTS
(SELECT b.licenseplateNo FROM Booking b WHERE b.licenseplateNo = c.licenseplateNo);
Проблема с этим кодом отображается в виде двух отдельных вопросов.
1 ответ
Автомобили, на которые не поступили заказы от клиентов из города x
select *
from bookings b, customers c, cars ca
where b.licenseplateNo = ca.licenseplateNo
and c.CustomerID = b.CustomerID
where not c.city = x;
Автомобили, для которых нет заказов из таблицы БРОНИРОВАНИЕ .
select *
from cars c
where not exists (
select b.licenseplateNo
from bookings b
where b.licenseplateNo = c.licenseplateNo
);
Вы также можете выполнить второй запрос с левым внешним соединением между автомобилями и бронированиями и проверить на ноль.
Автомобили, для которых нет заказов из таблицы BOOKING и нет заказов от клиентов из города x
Требование исключить автомобиль из определенного города клиента бронирования исключает подмножество требования исключить все автомобили, для которых есть бронирование. Следовательно, второй запрос tge позаботится об этом, если, конечно, мы не хотим ОБЪЕДИНЕНИЕ двух результатов запроса.
Вы можете выполнить объединение двух запросов, чтобы получить объединенные результаты.
Другой лучший вариант - изменить ваш 1-й запрос, чтобы использовать левое соединение между автомобилем и бронированием, и добавить или проверить значение null в вашем месте.
SELECT DISTINCT f.licenseplateNo, Model
FROM Car c
LEFT JOIN Booking b
ON c.licenseplateNo = b.licenseplateNo
LEFT JOIN Customer c
ON c.customerID = b.customerID
WHERE c.Ort <> 'cityname'
OR c.Ort is NULL
ORDER BY licenseplateNo ASC;
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
cars
иbookings
?