使用具有相似列名的 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 连接两个表的主要内容,如果未能解决你的问题,请参考以下文章