2个表

时间:2017-08-01 09:02:02

标签: sql sql-server

我尝试运行查询以从以下表格中获取以下结果

BaseVehicle表

BaseVehicleId   DeleteDate

1   NULL
2   NULL
3   NULL
4   NULL

车辆表

VehicleId   BaseVehicleId   DeleteDate

1   1   NULL
2   1   NULL
3   2   08-01-2017
4   3   NULL
5   3   08-01-2017
6   3   NULL
7   1   NULL
8   2   08-01-2017

结果表

BaseVehicleId

2
4

如果记录处于活动状态,则DeleteDate将为null。

BaseVehicle(一)之间有一对多的映射 - >车辆(很多)

我需要查询来获取基本车辆ID未与Vehicle表映射的记录,以及当与DeleteDate不为空的Base Vehicle相关联的所有车辆时。请告诉我如何实现这一目标。

我需要获取所有相关联的VehicleId的基本车辆ID IdDd的deleteDate不为空(如车辆表中的BaseVehicleId = 2,我不应该读取BaseVehicleId = 3的值)我的结果集)

enter image description here

1 个答案:

答案 0 :(得分:2)

有时候你应该采取相反的方式。

首先,我们必须查询Vehicle表中没有DeleteDate字段集的所有记录。我们应该排除这些记录和BaseVehicleId与之相关的记录。这意味着我们只会获得BaseVehicleId表中不存在的Vehicle,或者这些ID的所有记录都设置为DeleteDate

SELECT BaseVehicleId
FROM BaseVehicle
WHERE BaseVehicleId NOT IN (SELECT BaseVehicleId FROM Vehicle WHERE DeleteDate IS NULL)