Выбор из одной таблицы, где идентификатор из другой таблицы можно найти в третьей таблице - PullRequest
0 голосов
/ 21 ноября 2019

В настоящее время я пытаюсь выбрать все данные из одной таблицы, где идентификатор совпадает с идентификатором во второй таблице, где идентификаторы из второй таблицы совпадают с идентификатором в третьей таблице.

Я бынравится только возвращать данные, где идентификаторы в таблице два можно найти в третьей таблице.

Возможно, в идентификаторе появляются дубликаты, поэтому я пытался использовать MIN в своем коде ниже, но этоне дал результатов.

SELECT * 
FROM T1 one
LEFT JOIN T2 two ON two.ID = one.ID
WHERE two.ID IN 
(SELECT min(ID)
FROM T3 three)) abc

Ответы [ 2 ]

0 голосов
/ 21 ноября 2019

Приведенный ниже код выбирает все записи из Таблицы 1, которые имеют идентификаторы, совпадающие с идентификаторами в Таблице 2 и Таблице 3

SELECT * 
FROM   t1 one 
       JOIN (SELECT two.* 
             FROM   t2 two 
                    JOIN t3 three 
                      ON two.id = three.id) t 
         ON one.id = t.id 
0 голосов
/ 21 ноября 2019

Предполагая отношение 1-1 между t1 и t2 и отношение 1-N между t1 и t3, я думаю, что вы хотите exists:

SELECT t1.ID 
FROM t1
INNER JOIN t2 ON t1.ID = t2.ID
WHERE EXISTS (
    SELECT 1
    FROM t3
    WHERE t3.ID = t1.ID
)

Преимущество существует в том, что он не дублирует строки, если в t3 имеется более одной записи с совпадающим ID.

Примечание: если вам нужны только строки, в которых ID s соответствует, тоВы хотите INNER JOIN, а не LEFT JOIN. Первый исключает несовпадающие записи, а второй - их.

...