用于选择除给定名称之外的所有项目以及具有该给定名称的id的所有行的SQL查询

时间:2014-05-29 21:43:29

标签: sql sql-server

我为凌乱的头衔道歉。请考虑以下表格:

CAR_MODEL : car_model_id, car_name

CAR_INVENTORY : car_model_id, car_location_name,

用户会传入car_location_name,我想获得一个列表,其中包含给定car_location_name的所有car_name EXCLUDING 行,以及所有car_location_name的车辆。

让我进一步解释。

Join

对于这样的连接,我们假设用户传入“德国”。然后我想得到一个不包括第2行和第6行的列表,其中car_location_name为“Germany”。我还想用德国排除任何行的car_id行。 (在这种情况下,car_id为2和6,因此任何car_id为2或6的行都应该被删除。) 在这种情况下,由于德国的car_id为2,我想摆脱car_location_name为“Canada”的行,因为它的car_id也为2。

结果应为:

Result

我可以使用什么sql查询(可以是sql server特定的)来实现这个目标吗?

如果解释令人困惑,我很抱歉 - 如果您无法理解我想说的话,请提出问题。

1 个答案:

答案 0 :(得分:2)

最简单的可能就是像往常一样进行连接以获得结果,然后消除德国存在的所有car_model_id;

SELECT cm.car_model_id, ci.car_location_name, cm.car_name
FROM CAR_MODEL cm
JOIN CAR_INVENTORY ci
  ON cm.car_model_id=ci.car_model_id
WHERE cm.car_model_id NOT IN (
  SELECT car_model_id FROM CAR_INVENTORY WHERE car_location_name='Germany'
)

An SQLfiddle to test with