SQL在一个列表中但不是另一个列表

时间:2011-12-01 11:34:44

标签: mysql

有三个表Vehicle,VehicleGroup和AssignedVehicleGroup,它们具有以下格式:

车辆 - vehicleId,customerId,registration

VehicleGroup - groupId,groupName

AssignedVehicleGroup - vehicleId,groupId

使用此架构可以将车辆放置在多个组中但是我很难编写可以找到的单个查询:

  • 未分配给任何群组的所有车辆
  • 所有不属于当前组的车辆(基于传入的变量)

此查询将填充一个列表,允许用户将车辆添加到当前组(如果它尚未位于当前组或任何组中)。

2 个答案:

答案 0 :(得分:1)

这将为您提供在指定表格中没有匹配项的车辆列表:

SELECT v.* 
FROM   vehicle v 
       LEFT JOIN assignedvehiclegroup ag 
         ON ag.vehicleid = v.vehicleid 
            WHERE ag.vehicleid IS NULL 

要返回不在当前组中的车辆:

SELECT v.* 
FROM   vehicle v 
       LEFT JOIN assignedvehiclegroup ag 
         ON ag.vehicleid = v.vehicleid 
            WHERE ag.groupid<=>100

答案 1 :(得分:0)

不在群组查询中通常更难以整理。

没有任何组的车辆:

SELECT v.registration
FROM Vehicle v
LEFT JOIN AssignedVehicleGroup vg ON (v.vehicleId=vg.VehicleId)
WHERE vg.groupId IS NULL

不属于特定群体的车辆:

SELECT v.registration
FROM Vehicle v
LEFT JOIN AssignedVehicleGroup vg ON (v.vehicleId=vg.VehicleId AND vg.groupId = 5)
WHERE vg.groupId IS NULL