Обратное множество от многих до 1, где не все записи существуют в одной таблице

#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 is NOT 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 сработал правильно. Спасибо.