我试图创建一个显示与另一个查询相反的查询(就像布尔NOT)。 这是第一个查询:
SELECT RoomNumber, StructureNumber
FROM TimeTables
WHERE HourNumber = 1 AND DayNumber = 1
我需要获取该查询结果中不存在的所有行。 我第一次尝试从第一个查询中减去完整的表,但我不能这样做,因为没有" EXCEPT"在Access和 还因为我需要在四列之间减去(该表中有两个主键列) 这是我第一次尝试不起作用:
SELECT RoomNumber, StructureNumber
FROM TimeTables
EXCEPT
SELECT RoomNumber, StructureNumber
FROM TimeTables
WHERE HourNumber = 1 AND DayNumber = 1
第二次尝试提取第一个查询中存在的结果,但也没有效果:
SELECT RoomNumber, StructureNumber
FROM TimeTables
WHERE NOT EXISTS(
SELECT RoomNumber, StructureNumber
FROM TimeTables
WHERE HourNumber = 1 AND DayNumber = 1)
我在互联网上搜索了一些解决方案,发现了一些与我的问题相似的东西,但没有一个对我有效。
答案 0 :(得分:1)
NOT EXISTS
需要您提供的outer query
的参考
因此,您的NOT EXISTS
应为:
SELECT t.*
FROM TimeTables t
WHERE NOT EXISTS (SELECT 1
FROM TimeTables t1
WHERE t1.RoomNumber = t.RoomNumber and t1.StructureNumber = t.StructureNumber and
t1.HourNumber = 1 AND t1.DayNumber = 1
);
但是,例如where
子句就足够了
答案 1 :(得分:0)
只需将NOT EXISTS
子查询与主查询相关联,便于使用表别名, t 和 sub :
SELECT t.*
FROM TimeTables t
WHERE NOT EXISTS
(SELECT 1
FROM TimeTables sub
WHERE sub.HourNumber = 1 AND sub.DayNumber = 1
AND sub.RoomNumber = t.RoomNumber
AND sub.StructureNumber = t.StructureNumber)
但只需运行一个WHERE
子句来反转逻辑:
SELECT t.*
FROM TimeTables t
WHERE t.HourNumber <> 1 OR t.DayNumber <> 1
答案 2 :(得分:0)
我认为这可以满足您的需求:
SELECT RoomNumber, StructureNumber
FROM TimeTables
GROUP BY RoomNumber, StructureNumber
HAVING SUM(IIF(HourNumber = 1 AND DayNumber = 1, 1, 0)) = 0;
HAVING
子句计算符合指定条件的行数(对于每个RoomNumber
/ StructureNumber
组合)。 = 0
表示没有这样的行。