如何从此查询中获取正确的输出

时间:2015-07-18 07:42:54

标签: sql sql-server

我创建一个sql查询,当有任何汽车库存时,从dbo.car输出licensePlate。这意味着我必须在dbo.Sell和dbo下查看。确保汽车没有出售或租赁。

我需要输出以下内容:

LicensePlateNo
--------------
SGK5556A

但输出将始终为空白。 我有以下声明:

SELECT 
    LicensePlateNo 
FROM car 
INNER JOIN CarTransaction ON     
    car.ChassisNo =  CarTransaction.ChassisNo 
INNER JOIN Sell on 
    CarTransaction.TransactionID = Sell.TransactionID
INNER JOIN Rent on 
    CarTransaction.TransactionID = Rent.TransactionID
WHERE  
    Car.Make = 'Toyota' AND 
    Sell.TransactionID IN (SELECT TransactionID FROM Sell) AND
    Rent.TransactionID IN (SELECT TransactionID FROM Rent)   

我似乎无法获得正确的查询。查询有效的唯一时刻是我没有为dbo.Rent指定查询。但我需要验证是否通过租赁历史记录提供汽车

2 个答案:

答案 0 :(得分:0)

如果您的汽车已售出已租用,则此查询仅会产生结果。这就是INNER JOIN的用途 - 它们只在两个表中找到记录时给出结果。

我想你想要一个这样的SQL语句:

ListView

答案 1 :(得分:0)

不需要内部联接,并且汽车不会同时出售和出租,查询可以写成:

SELECT
  LicensePlateNo
FROM
  Car
  INNER JOIN
    CarTransaction 
  ON 
    Car.ChassisNo = CarTransaction.ChassisNo
WHERE
  Car.Make = 'Toyota' AND
  CarTransaction.TransactionID NOT IN (SELECT TransactionID FROM Sell) AND
  CarTransaction.TransactionID NOT IN (SELECT TransactionID FROM Rent)
;