获取与查询结果相反的访问 2016



我正在尝试创建一个显示与另一个查询相反的查询(就像布尔值 NOT(。 这是第一个查询:

SELECT RoomNumber, StructureNumber
FROM TimeTables
WHERE HourNumber = 1 AND  DayNumber = 1

我需要获取该查询结果中不存在的所有行。 第一次我尝试从第一个查询中减去整个表,但我无法做到这一点,因为 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)

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

>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条款就足够

我认为这可以满足您的需求:

SELECT RoomNumber, StructureNumber
FROM TimeTables
GROUP BY RoomNumber, StructureNumber
HAVING SUM(IIF(HourNumber = 1 AND  DayNumber = 1, 1, 0)) = 0;

HAVING子句计算与指定条件匹配的行数(对于每个RoomNumber/StructureNumber组合(。= 0表示没有这样的行。

只需将NOT EXISTS子查询与主查询相关联,即可使用表别名tsub进行简化:

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

最新更新