Какие-либо варианты использовать левое соединение в конструкции "из таблицы1, таблицы2, где table1.id = table2.id"? - PullRequest
0 голосов
/ 26 июня 2018

У меня два запроса. Один как:

with table1 as (...), table2 as (...) and so on select * from table1, table2, ... where table1.column1 = table2.column1 and table1.column1 = table3.column1 etc.

Работает хорошо и довольно быстро (200-500мс). Но проблема в нулевых ячейках. Если есть какое-либо пустое поле - оно не занимает всю строку.

И еще один запрос:

with table1 as (...), table2 as (...) and so on select * from table1 left join table2 on table1.column = table2.column left join table3 on table1.column = table3.column etc

Это дает мне желаемый результат, но слишком медленно (3-5 минут).

Есть ли какое-либо решение, чтобы первый запрос сохранил пустые поля и дал мне все данные?

1 Ответ

0 голосов
/ 06 июля 2018

Да, это возможно. Вы можете использовать условие COALESCE.

Функция COALESCE возвращает первый из своих аргументов, который не является ноль. Нуль возвращается, только если все аргументы являются нулевыми. Это часто используется для замены значения по умолчанию для нулевых значений, когда данные извлекается для отображения, например: https://www.postgresql.org/docs/8.1/static/functions-conditional.html

with table1 as (...), table2 as (...)
select COALESCE(column1,''), 
       COALESCE(column2,'')
from table1, table2, ... 
where table1.column1 = table2.column1 and table1.column1 = table3.column1

 column1 | column2
---------+--------
 1       | one
 2       | 
 3       | other

Если столбец нулевой, столбец будет пустым.

...