Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取查询结果的对立面_Sql_Ms Access - Fatal编程技术网

Sql 获取查询结果的对立面

Sql 获取查询结果的对立面,sql,ms-access,Sql,Ms Access,我正在尝试创建一个查询,该查询与另一个查询显示相反的内容,就像布尔值一样。 这是第一个查询: SELECT RoomNumber, StructureNumber FROM TimeTables WHERE HourNumber = 1 AND DayNumber = 1 我需要获取该查询结果中不存在的所有行。 第一次我试图从第一个查询中减去完整的表,但我无法做到,因为在Access和 另外,因为我需要在四列之间进行减法,所以该表中有两个主键列 这是我第一次尝试失败: SELECT Room

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

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)
在第二次尝试提取第一次查询中不存在但也不起作用的结果时:

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)
我在互联网上搜索了一些解决方案,发现了一些与我的问题类似的问题,但没有一个对我有效。

不存在需要参考您尚未提供的外部查询

因此,您的不存在应为:

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子句只需将NOT EXISTS子查询与主查询关联起来,并使用表别名t和sub:

但只需运行WHERE子句,颠倒逻辑即可:

SELECT t.*
FROM TimeTables t
WHERE t.HourNumber <> 1 OR t.DayNumber <> 1

我想这正是你想要的:

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

HAVING子句统计符合指定条件的每个RoomNumber/StructureNumber组合的行数。=0表示没有这样的行。

此查询提供了我想要的完美结果,非常感谢。但是你能解释一下这个问题是怎么回事吗?我不知道IFF函数,也不明白你用求和的方法。