Access表中的多表不等于

时间:2012-11-25 18:39:25

标签: sql ms-access subquery correlated-subquery multi-table

我有两张桌子。车辆和所有权。我正在尝试进行一个查询,该查询将为我提供OWNERSHIP表中所有车辆 NOT 的列表。我基本上需要一份关于我的可用车辆库存的报告。我试过这个问题:

SELECT VEHICLE.*
FROM VEHICLE, OWNERSHIP
WHERE (VEHICLE.VEH_ID <> OWNERSHIP.VEH_ID);

我得到:enter image description here

当我做到平等时,我会获得所有权中列出的所有车辆。但NOT Equal没有。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

尝试

SELECT VEHICLE.*
FROM VEHICLE
WHERE NOT EXISTS
(SELECT NULL FROM OWNERSHIP WHERE VEHICLE.VEH_ID= OWNERSHIP.VEH_ID);

答案 1 :(得分:1)

如果您的表包含许多行,NOT EXISTS方法可能会很慢。另一种可以快得多的方法是使用带有LEFT JOIN子句的WHERE来仅返回右侧连接字段为空的行。

SELECT VEHICLE.*
FROM
    VEHICLE AS v
    LEFT JOIN OWNERSHIP AS o
    ON v.VEH_ID = o.VEH_ID 
WHERE o.VEH_ID Is Null;

您可以使用Access'“查找不匹配的查询向导”来创建类似的查询。

如果两个表都很小,你可能不会发现差异。但是应该很容易检查差异是否明显。如果您的牌桌随着时间的推移大幅增长,这种方法将更好地为您服务