2011-12-01 29 views
0

有三个表的车辆,VehicleGroup和AssignedVehicleGroup它具有以下格式:SQL在一个列表而不是另一个

车辆 - vehicleId,客户ID,注册

VehicleGroup - 的groupId,组名

AssignedVehicleGroup - vehicleId,groupId

车辆罐b

  • 没有分配到任何组
  • 所有车辆所有车辆不属于当前组中:e。使用这个模式,但是我很努力编写一个查询可以找到放置在多个组(基于传入的变量)

此查询将填充允许用户将车辆添加到当前组的列表(如果它尚不在当前组或任何组中)。

回答

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 
+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 
+0

什么''<=>?我没有使用该运算符之前 – Cylindric

+0

@Cylindric这是空安全平等http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal-to – Pentium10

+0

第一个查询确实做了什么说,但是没有考虑到我们可能想要分配给CURRENT小组的那些车辆。所有查询真正需要做的是返回所有不在当前组中的车辆。第二个查询完全相反 - >返回组100中的所有车辆。 –

相关问题