Соединение двух таблиц в двух измерениях без перекрестного соединения - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть таблица с идентификаторами и доменами (T1).Другой с именами и доменами (T2).Третий с именами и идентификаторами (T3).

В упрощенном виде мой запрос выглядит следующим образом:

SELECT *
FROM T2
LEFT JOIN T1 
ON T2.domain = T1.domain 
) 
LEFT JOIN T3
ON T1.name = T3.name

Вывод, который я ищу, представляет собой список со столбцами: "ID", "Имя" и "Домен"где либо домены, либо имена совпадают, чтобы получить идентификаторы.Проблема, с которой я сталкиваюсь, состоит в том, что один домен может совпадать с двумя именами, и это создает набор ложных срабатываний (поскольку имя совпадает, неверный идентификатор также присваивается).

Любые передовые практики, которым я должен следовать при выполнении такого рода объединений, были бы наиболее полезными.

Спасибо S

1 Ответ

0 голосов
/ 26 ноября 2018

Я думаю, что вы хотите:

SELECT t2.name, t2.domain, coalesce(t1.id, t2.id)
FROM T2 LEFT JOIN
     T1 
     ON T2.domain = T1.domain LEFT JOIN
     T3
     ON T2.name = T3.name AND
        t1.domain IS NULL;  -- no match on T1

Это соответствует domain в первую очередь.Тогда, если нет domain -матча, он использует name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...