PostgreSQL 同表左外连接多表

标签 postgresql left-join

我有一个表需要与两个不同的表进行左外连接。当我将表两次放入查询中并在 where 子句中将其与它自身连接时(如下面的句子)它起作用了。我认为这不应该是正确的方法。如何编写 select 语句和外连接多个不同表的表?

SELECT cols."COLUMN_NAME"
     , COALESCE(translations."COLUMN_LANG_TITLE",cols."COLUMN_TITLE") AS "COLUMN_TITLE" 
     , options."OPTION_DESC"
  FROM 

"EXTAPP_SETUP"."OBJECT_COLUMNS_TAB" cols LEFT OUTER JOIN "EXTAPP_SETUP"."COLUMN_LANG_TITLES_TAB" translations
        ON translations."EXTAPP_ID" = cols."EXTAPP_ID" and translations."OBJECT_NAME" = cols."OBJECT_NAME" and translations."COLUMN_NAME" = cols."COLUMN_NAME" and translations."LANGUAGE_CODE" = 'fr',

"EXTAPP_SETUP"."OBJECT_COLUMNS_TAB" cols2 LEFT OUTER JOIN "EXTAPP_SETUP"."COL_FIX_OPTIONS_TAB" options
        ON options."EXTAPP_ID" = cols2."EXTAPP_ID" and options."OBJECT_NAME" = cols2."OBJECT_NAME" and options."COLUMN_NAME" = cols2."COLUMN_NAME" 

WHERE cols."EXTAPP_ID" = cols2."EXTAPP_ID" and cols."OBJECT_NAME" = cols2."OBJECT_NAME" and cols."COLUMN_NAME" = cols2."COLUMN_NAME" 

最佳答案

您可以使用后续的左连接。 由于您并没有真正使用 cols2 表,因此可以将其从查询中删除。这也将消除 where 子句,因为您不需要将 cols 表与其自身连接

SELECT cols."COLUMN_NAME"
  , COALESCE(translations."COLUMN_LANG_TITLE",cols."COLUMN_TITLE") AS "COLUMN_TITLE" 
  , options."OPTION_DESC"
FROM "EXTAPP_SETUP"."OBJECT_COLUMNS_TAB" cols 
LEFT OUTER JOIN "EXTAPP_SETUP"."COLUMN_LANG_TITLES_TAB" translations
  ON translations."EXTAPP_ID" = cols."EXTAPP_ID" 
    and translations."OBJECT_NAME" = cols."OBJECT_NAME" 
    and translations."COLUMN_NAME" = cols."COLUMN_NAME" 
    and translations."LANGUAGE_CODE" = 'fr' 
LEFT OUTER JOIN "EXTAPP_SETUP"."COL_FIX_OPTIONS_TAB" options
  ON options."EXTAPP_ID" = cols."EXTAPP_ID" 
    and options."OBJECT_NAME" = cols."OBJECT_NAME" 
    and options."COLUMN_NAME" = cols."COLUMN_NAME" 

关于PostgreSQL 同表左外连接多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858815/

相关文章:

postgresql - 直接在 PostgreSQL 中运行执行计划

postgresql 12 jsonb_path_query 如何从一个大的 jsonb 对象中选择一些键来构造一个小对象?

postgresql - Azure PostgreSQL 服务器服务排序规则创建错误

mysql - 多个 AND 在同一个连接表列上

sql - 左连接产生内连接结果 - PostgreSQL

mysql - 使用子查询左连接三个表

sql - 比较同一组 SQL 中的 2 个时间段

python - 为数百万数据运行选择查询的有效方法

SQL/Doctrine : Left Join problem

sql - 如何使用前一行的值填充空列?