1

我有三个需要信息的表。我正在尝试获取某些遵循某些准则的汽车的车牌号。

在此处输入图像描述

指导方针是: 没有来自城市 x 的客户的任何预订的汽车。没有从 BOOKING 表中进行任何预订的汽车。

将不胜感激我能得到的任何帮助。

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

此代码的问题显示为两个单独的问题。

4

1 回答 1

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;

没有从 BOOKING 表中进行任何预订的汽车。

select *
from cars c
where not exists (
  select b.licenseplateNo 
  from bookings b
  where b.licenseplateNo = c.licenseplateNo
);

您还可以使用汽车和预订之间的左外连接执行第二个查询并检查是否为空。

没有来自 BOOKING 表的任何预订且没有来自 x 城市的客户的任何预订的汽车

从特定预订客户城市中排除汽车的要求排除了要求的子集,即排除所有已预订的汽车。因此,tge 第二个查询会处理这个问题,除非我们当然想要两个查询结果的 UNION。

您可以执行两个查询的联合以获取组合结果。

另一个更好的选择是修改您的第一个查询以在汽车和预订之间使用左连接,并在您的位置添加或检查 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;
于 2013-10-05T15:45:12.193 回答