与查询结果Access 2016相反

时间:2018-05-29 16:33:52

标签: sql ms-access

我试图创建一个显示与另一个查询相反的查询(就像布尔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)

我在互联网上搜索了一些解决方案,发现了一些与我的问题相似的东西,但没有一个对我有效。

3 个答案:

答案 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表示没有这样的行。