我在 SQL 方面不是那么好,我遇到了一个我不知道如何解决的问题。我已经阅读并重新阅读了一本关于 SQL 的书(O'Reilly's Learning SQL)的部分内容,我希望其中包含我需要的信息,但我还没有找到。
我的问题如下。我将使用一个简化的示例使其更易于讨论。
我有三张桌子,car,rim 和两者的组合:carRim。
car
carId
description
rim
rimId
description
carRim
carRimId
carId
rimId
price
在表 carRim 中,我有一个额外的 price 属性,因为每种类型的汽车的轮辋价格可能不同。我的一个限制是,每种类型的轮辋只能与每种类型的汽车耦合一次。所以车圈的所有组合都应该是独一无二的。
如果我想为汽车添加轮辋,我需要一个尚未与该汽车耦合的轮辋列表。为此,我认为我需要轮辋表和 carRim 表分别用于轮辋的总列表和已经耦合到我要添加轮辋的汽车的 carRims 列表。
我编写了(简单)查询来制作与特定汽车耦合的轮辋列表,在以下示例中,汽车 ID 为 9。
SELECT
*
FROM
rims
INNER JOIN
carRims
ON
carRims.rimId = rim.rimId
WHERE
carRims.carId = 9
但现在我需要尚未与特定汽车耦合的轮辋列表。问题是,如果我进行 LEFT OUTER JOIN,我得到的列表会被轮辋与其他汽车的耦合“污染”,因此“WHERE carRims.carId IS NULL”的过滤条件不起作用。
SELECT
*
FROM
rims
LEFT OUTER JOIN
carRims
ON
carRims.rimId = rim.rimId
WHERE
carRims.carId IS NULL
另一个挑战是我不能使用 MySQL 5 的任何新语法,比如子查询,因为我的客户端使用的是 MySQL 4,此时无法升级。
是否可以在 MySQL 4 中编写针对此问题的查询,我怀疑可以。
谢谢!