在“ from table1,table2 where table1.id = table2.id”构造中是否可以使用左连接?

时间:2018-06-26 09:24:19

标签: performance join left-join psql

我有两个查询。一个像:

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

它运作良好且相当快(200-500ms)。但是问题是单元格为空。如果有任何空字段-它不会占用整行。

另一个查询是:

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 :(得分:0)

是的,有可能。您可以使用COALESCE条件。

  

COALESCE函数返回的第一个参数不是   空值。仅当所有参数均为null时,才返回Null。经常   用于在数据为   检索显示,例如: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

如果该列为空,则该列将为空白。