Получите противоположность результатов запроса Access 2016 - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь создать запрос, который отображает противоположность другому запросу (как логическое НЕ).Это первый запрос:

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

Мне нужно получить все строки, которых нет в результатах этого запроса.В первый раз я пытался вычесть полную таблицу из первого запроса, но я не смог этого сделать, потому что в Access нет «EXCEPT», а также потому, что мне нужно вычесть между четырьмя столбцами (в этой таблице два столбца первичного ключа) это моя первая попытка, которая не сработала:

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 голосов
/ 29 мая 2018

Просто сопоставьте подзапрос 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
0 голосов
/ 29 мая 2018

Я думаю, что это то, что вы хотите:

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

Предложение HAVING подсчитывает количество строк (для каждой комбинации RoomNumber / StructureNumber), которые соответствуют указанным условиям.= 0 означает, что таких строк нет.

0 голосов
/ 29 мая 2018

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оговорки должно хватить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...