首页 > 解决方案 > 当左表中没有值时连接表

问题描述

我有 2 个包含一些数据的表,当值不存在于 clients 表和 custom_clients 表中时,我尝试加入它们。当值不在 custom_clients 表中时加入表时它工作正常,但当值不存在于 clients 表中时不会。

clients
id language_id key            text
1   1        client_account   new account
2   2        client_signin    signin


custom_clients
id language_id key            text
1   1        client_name      name
2   2        client_signin    login

The output should be a table like
language_id key            text
1        client_account   new account
1        client_name      name
2        client_signin    login

这是我尝试过的

SELECT language_id, key, text FROM clients 
INNER JOIN custom_clients ON custom_clients.language_id = clients.language_id 

标签: sqlpostgresql

解决方案


一种方法使用完全外连接:

SELECT
    COALESCE(cc.language_id, c.language_id) AS language_id,
    COALESCE(cc."key", c."key") AS "key",
    COALESCE(cc.text, c.text) AS text
FROM clients c
FULL OUTER JOIN custom_clients cc
    ON cc.language_id = c.language_id AND
       cc."key" = c."key";

演示

编辑:

USING这可以通过以下子句稍微简化:

SELECT language_id, "key",
       COALESCE(cc.text, c.text) AS text
FROM clients c FULL OUTER JOIN
     custom_clients cc
     USING (language_id, "key");

推荐阅读