繁体   English   中英

连接具有相同数据的不同列的表

[英]join tables that have different column with the same data

我有三个表收集器、销售员和客户,每个表的第一列都有不同的列,但里面有相同的数据,如下所示:

顾客:

|---------------------|------------------|
|      cust#          |      cust_name   |
|---------------------|------------------|
|          12         |         a        |
|---------------------|------------------|
|          5                    b
|---------------------|------------------|
|          10         |         c        |
|---------------------|------------------|

销售员:

|---------------------|------------------|
|      sal#          |      sales_name   |
|---------------------|------------------|
|          12         |         t        |
|---------------------|------------------|
|          5                    s
|---------------------|------------------|
|          10         |         v        |
|---------------------|------------------|

收藏家:

|---------------------|------------------|
|      coll#         |      coll_name   |
|---------------------|------------------|
|          12         |         r        |
|---------------------|------------------|
|          5                    k
|---------------------|------------------|
|          10         |         z        |
|---------------------|------------------|

我需要知道如何连接这三个表并为第一列命名如下:

|---------------------|------------------|-------------------|----------------|
|      given_name#    |       cust#      |     sales_name         coll_name   
|---------------------|------------------|-------------------|----------------|
|          12         |         a        |        t                   r
|---------------------|------------------|-------------------|----------------|
|          5                    b                 s                   k 
|---------------------|------------------|-------------------|----------------|
|          10         |         c        |        v                   z
|---------------------|------------------|-------------------|----------------|

任何帮助将不胜感激

您可以在这些表中使用INNER JOIN

SELECT c.coll# AS given_name#, cs.cust_name AS cust#, s.sales_name, c.coll_name
  FROM collectors c
  JOIN salesman s
    ON c.coll# = sal#
  JOIN customer cs
    ON c.coll# = cs.cust#

PS:如果你的DBMS是MySQL,那么包含#字符的列应该用反引号(`)来引用,比如

`given_name#` or `sal#` ..etc.

每个 id 在所有三个表中总是有一行吗? 如果是这样,您可以只使用 1 个带有 AS 的列

SELECT `sal#` as `given_name#`

尝试这个..

--********************************
if object_id('customer') is not null
begin
    drop table customer
end
go
create table [dbo].[customer](
    [id] [int] identity(1,1) not null,
    [cust] [int] not null,
    [cust_name] [varchar](20) not null)
go
insert into customer (cust, cust_name) values (12, 'a')
insert into customer (cust, cust_name) values (5, 'b')
insert into customer (cust, cust_name) values (10, 'c')
go


if object_id('salesmen') is not null
begin
    drop table salesmen
end
go
create table [dbo].[salesmen](
    [id] [int] identity(1,1) not null,
    [sal] [int] not null,
    [sales_name] [varchar](20) not null
)
go
insert into salesmen (sal, sales_name) values (12, 't')
insert into salesmen (sal, sales_name) values (5, 's')
insert into salesmen (sal, sales_name) values (10, 'v')
go


if object_id('collectors') is not null
begin
    drop table collectors
end
go
create table [dbo].[collectors](
    [id] [int] identity(1,1) not null,
    [coll] [int] not null,
    [coll_name] [varchar](20) not null
)
go
insert into collectors (coll, coll_name) values (12, 'r')
insert into collectors (coll, coll_name) values (5, 'k')
insert into collectors (coll, coll_name) values (10, 'z')
go


--********************************
select dbo.customer.cust 'given_name', dbo.customer.cust_name 'cust', dbo.salesmen.sales_name 'sales_name', dbo.collectors.coll_name 'coll_name'
from dbo.collectors inner join dbo.customer on dbo.collectors.coll = dbo.customer.cust inner join dbo.salesmen on dbo.customer.cust = dbo.salesmen.sal

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM