Соединения

FULL JOIN

FULL JOIN - полное внешнее соединение. Если для какой-либо из таблиц не нашлось строки в другой таблице, то строка все равно попадает в результат, а значения столбцов другой таблицы равны null.

Рассмотрим как работает FULL JOIN на примере. Пусть у нас есть две таблицы:

SELECT *
  FROM table1
idvalue
1One
2Two
3Three

и

SELECT *
  FROM table2
idvalue
2Two
3Three
4Four
5Five

На этих данных выполним запрос

SELECT t1.id as id_1,
       t1.value as value_1,
       t2.id as id_2,
       t2.value as value_2
  FROM table1 t1
  FULL JOIN 
       table2 t2
    ON t1.id = t2.id
 ORDER BY t1.id, t2.id
id_1value_1id_2value_2
1One
2Two2Two
3Three3Three
4Four
5Five

Однако, в реализации FULL JOIN в PostgreSQL есть дефект. Например, если в условии соединения не будет условий на равенство столбцов таблиц (=), или встретится OR, то во время выполнения запроса возникнет ошибка:

FULL JOIN is only supported with merge-joinable or hash-joinable join conditions

Попробуй выполнить следующий запрос:

SELECT *
  FROM product_price pp
  FULL JOIN
       product_price ppl
    ON ppl.price < pp.price

Подробнее о дефекте можно почитать здесь.

    ПредыдущаяСледующая