Сценарий внешнего соединения SQL - казался простым, когда он был предложен - PullRequest
1 голос
/ 14 марта 2012

Я немного много ржавый с моим SQL, и это сводит меня с ума.То, что в моей голове - простое внешнее соединение, по некоторым причинам не работает.

t1:столбец1, столбец2101, 1101, 2101, 3102, 2

t2:столбец1, столбец21, один2, два3, три4, четыре(Где t1.column2 -> t2.column1)Учитывая таблицы над набором данных, который я ищу, будет:101, один101, два101, три101, ноль

102, ноль102, два102, ноль102, ноль

Может быть, я слишком обдумал это, я не знаю.Я пытаюсь вернуть 4 строки для любого выбора, в этом примере, где t1.column1 = 101 или t1.column1 = 102 и т. Д.

Ответы [ 4 ]

3 голосов
/ 14 марта 2012
SELECT
  td.column1,
  CASE WHEN t1.column2 IS NOT NULL THEN t2.column2 END AS column2
FROM (SELECT DISTINCT column1 FROM t1) AS td
CROSS JOIN t2
LEFT JOIN  t1 ON t1.column1 = td.column1 AND t1.column2 = t2.column1

Вариант вышеизложенного (предложено ypercube в комментариях):

SELECT
  t1_d.column1,
  t2_2.column2
FROM (SELECT DISTINCT column1 FROM t1) AS t1_d
CROSS JOIN t2
LEFT JOIN  t1
  INNER JOIN t2 AS t2_2 ON t1.column2 = t2_2.column1
ON t1.column1 = t1_d.column1 AND t1.column2 = t2.column1
3 голосов
/ 14 марта 2012

Звучит так, как вы хотите:

SELECT sq.column1,
       CASE WHEN EXISTS
                  ( SELECT 1
                      FROM t1
                     WHERE column1 = sq.column1
                       AND column2 = t2.column1
                  )
            THEN t2.column2
        END
  FROM ( SELECT DISTINCT
                column1
           FROM t1
       ) sq
 CROSS
  JOIN t2
;
1 голос
/ 14 марта 2012
SELECT t1.column1, t2.column2
  FROM t2 JOIN t1 ON t1.column2 = t2.column1
UNION
SELECT t2.column2 AS column1, NULL AS column2
  FROM t2
 WHERE NOT EXISTS ( SELECT * 
                      FROM t1
                     WHERE t1.column2 = t2.column1 );
0 голосов
/ 14 марта 2012
SELECT
   t1.column1, t2.column2
FROM t1
   LEFT JOIN t2 ON t1.column2 = t2.column1

что должно делать?

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