#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