#sql #vb.net #ms-access
#sql #vb.net #ms-access
Вопрос:
TSQL/Access
Я пытаюсь вернуть результат, обратный результирующему набору….
SELECT Units.Unit_ID
FROM Units
WHERE (((Units.[Unit_ID]) In (SELECT Objects.Unit_ID FROM Objects)));
Это возвращает полный набор выше плюс одну дополнительную запись, которую я ожидал….
SELECT Units.Unit_ID
FROM Units
WHERE (((Units.[Unit_ID]) not In (SELECT Objects.Unit_ID FROM Objects)));
Units имеет отказ от записей, которые не существуют в объектах. Количество объектов до 1 единиц. Но некоторые единицы не существуют в объектах. Это результирующий набор, который я ищу.
Набор образцов данных:
Объекты Unit_ID 1 1 1 2 2 4 5 56 78
Единицы измерения Unit_ID 1 2 3 4 5 56 78
Результирующий набор должен быть: 3
Я не хочу возвращать значения, которые находятся в обеих таблицах.
Комментарии:
1. Так в чем проблема? обратное для
IN
isNOT IN
должно работать нормально2. Эти запросы являются обратными друг другу. Вы говорите, что есть записи, которые есть в обоих результатах? Можете ли вы предоставить образцы данных и выходных данных?
3. Оба запроса возвращают полные результаты таблицы, второй включает запись abandon, которую я ищу.
4. просто мысль, возможно, у вас слишком много скобок, попробуйте использовать меньше: (единиц. [Unit_ID] отсутствует в (ВЫБЕРИТЕ объекты. Unit_ID ИЗ объектов));
5. скобки ничего не изменили
Ответ №1:
Любопытно, что это возвращает:
SELECT Units.Unit_ID
FROM Units
LEFT JOIN Objects ON Objects.Unit_ID = Units.[Unit_ID]
WHERE Objects.Unit_ID IS NULL
или
SELECT Units.Unit_ID
FROM Units
LEFT JOIN Objects ON Objects.Unit_ID = Units.[Unit_ID]
GROUP BY Units.Unit_ID
HAVING COUNT(Objects.Unit_ID) = 0
Комментарии:
1. Полный список, все записи. На самом деле я начал это с левого соединения/
2. Как насчет: ВЫБЕРИТЕ единицы измерения. Unit_ID ИЗ единиц СЛЕВА ПРИСОЕДИНЯЕТ объекты К объектам. Unit_ID = Единицы измерения. [Unit_ID] ГРУППИРОВКА По единицам измерения. ИДЕНТИФИКАТОР единицы, ИМЕЮЩИЙ КОЛИЧЕСТВО (Объекты. Unit_ID) = 0
3. Ваш первый запрос в вашем ответе post сработал правильно. Спасибо.