使用具有相似列名的 sql 连接两个表

Posted

技术标签:

【中文标题】使用具有相似列名的 sql 连接两个表【英文标题】:Joining two tables using sql with similar column names 【发布时间】:2020-12-11 01:08:05 【问题描述】:

我有两张桌子:

表 A.

| id       | name       | type     | value    |
| -------- | ---------- |----------|----------
| First    | row        | row      | row      |
| Second   | row        | row      | row      |

表 B.

| id       | name       |condition |
| -------- | ---------- |----------|
| First    | row        | row      | 
| Second   | row        | row      |

我想根据在表 B 中找到的 id 从表 A 中选择值。这可以通过 TAbleA.id = tableB.id 上的连接来完成。但是,如果我想要来自 TableB 而不是 TableA 的名称字段怎么办。我该如何做到这一点?

生成的 tableC 将是: 表 C.

| id (from table A | name          | type          | value.        |
| found in B)      | (from tableB) | (from TableA) | (from TableA) |
| ---------------- | ------------- |---------------|---------------|
| First            | row           | row           | row           |
| Second           | row           | row           | row           |

【问题讨论】:

我发现连续调用列值'row' 有点令人困惑。行不是列中的值。 【参考方案1】:

按照您在ON 子句中所做的那样,通过在列前加上表名来限定列。

SELECT tableb.name
       FROM tablea
            INNER JOIN tableb
                       ON tableb.id = tablea.id;
            

您还可以给表起别名,使其具有更有意义或更短的标识符。

SELECT b.name
       FROM tablea a
            INNER JOIN tableb b;
                       ON b.id = a.id;

如果您多次加入同一个表,则在限定其任何列时甚至必须使用别名,因为表名不会描述哪个实例的含义。

【讨论】:

【参考方案2】:

您在select 中列出您想要的列:

select a.id, b.name, a.type
from a join
     b
     on a.id = b.id;

如果你想同时选择,你可以给他们不同的别名:

select a.id, a.name as a_name, b.name as b_name, a.type
from a join
     b
     on a.id = b.id

【讨论】:

以上是关于使用具有相似列名的 sql 连接两个表的主要内容,如果未能解决你的问题,请参考以下文章

当两个表具有相同的 dist 和 sort 键,但列名不同时,Redshift 是不是执行合并连接?

具有相同列名的 MySQL 连接表

连接两个具有不同键名的表

基于 SQL 查询中最接近的文本匹配连接表?

已经建立了两个表,请问如何用SQL语句建立关联?

连接来自两个不同表的两列