Как найти не совпадающие записи, используя три таблицы?

#sql #oracle

Вопрос:

Я изо всех сил пытался создать следующий запрос. Мне была предоставлена электронная таблица, содержащая 2 тыс. ID Мне нужно выяснить, есть ли ID у них записи в двух разных таблицах. У каждого ID может быть несколько записей в зависимости от того, к какой группе они принадлежат.

Пример:

Таблица masterIDS (я импортировал данные во временную таблицу), Таблица IDS , Таблица AuditGroup

Мастера

ID
1
2

ИДЕНТИФИКАТОРЫ

ID Расположение
1 10
2 12

Аудиторская группа

Имя Расположение
X 10
Y 11

Что мне нужно сделать, так это:

Найдите все идентификаторы из masterIDS таблицы в IDS таблице, и если они найдены, их местоположение в IDS таблице должно быть одинаковым в AuditGroup таблице. Значение IDS не может быть равно нулю. Так, например , допустим, мы используем ID=1 from masterIDS table и ищем его в IDS таблице, и он найден с помощью a location=10 , затем нам нужно использовать это location=10 , чтобы найти его в AuditGroup таблице so location=location (в таблице аудита нет an ID ). Это место 10 может иметь много названий, поэтому мы могли бы найти его в AuditGroup таблице 5 locations=10 , но name=a,b,c,d,f

Основные идентификаторы временных таблиц уже содержат все идентификаторы, которые мне нужно запросить. Я считаю, что сделал все вышесказанное, но как я могу сделать несоответствия, например, у меня есть ID=2 от mastersIDS, я иду искать его в таблице идентификаторов, я нашел его с местоположением=12, но этого нет в таблице AuditGroup.

Я пытался сделать два соединения, не в, не существует, но я могу это понять

Ответ №1:

Я считаю, что это должно достичь того, что вам нужно, оно возвращает таблицу идентификаторов и местоположения, которых нет в таблице AuditGroup.

 -- Create MasterIDs and insert test data
CREATE TABLE #MasterIDs ([ID] INT)
INSERT INTO #MasterIDs VALUES (1)
INSERT INTO #MasterIDs VALUES (2)

-- Create IDs and insert test data
CREATE TABLE #IDs ([ID] INT, [location] INT)
INSERT INTO #IDs VALUES (1, 10)
INSERT INTO #IDs VALUES (2, 12)

-- Create AuditGroup and insert test data
CREATE TABLE #AuditGroup ([name] CHAR(1), [location] INT)
INSERT INTO #AuditGroup VALUES ('X', 10)
INSERT INTO #AuditGroup VALUES ('Y', 10)


SELECT mid.*, id.[location]
FROM #MasterIDs mid
LEFT JOIN #IDs id
ON mid.ID = id.ID
WHERE id.[location] NOT IN (SELECT [location] FROM #AuditGroup)


DROP TABLE #MasterIDs
DROP TABLE #IDs
DROP TABLE #AuditGroup