SQL Server:联接表时删除重复的列

Tug*_*zel 5 sql sql-server join

我有4个表,其中一列在所有表上都通用。有没有一种方法可以创建视图,在该视图中我可以按同一列联接所有表,而我只能看到一次公共列。

假设我有table1

Cust ID | Order ID | Product_Name
Run Code Online (Sandbox Code Playgroud)

表2

Cust_ID | Cust_Name | Cust_Address
Run Code Online (Sandbox Code Playgroud)

表3

Cust_ID | Cust_Acc | Acc_Type
Run Code Online (Sandbox Code Playgroud)

表4

Cust_ID | Contact_Phone | Cust_Total_Ord
Run Code Online (Sandbox Code Playgroud)

这是我用来联接表的代码;

SELECT * 
FROM table1
LEFT JOIN table2 ON table1.Cust_ID = table2.Cust_ID
LEFT JOIN table3 ON table2.Cust_ID = table3.Cust_ID
LEFT JOIN table4 ON table3.Cust_ID = table4.Cust_ID
Run Code Online (Sandbox Code Playgroud)

Cust_ID从下面的每个表中看到所有连接的表;

Cust ID| Order ID|Product_Name| Cust_ID| Cust_Name|Cust_Address| Cust_ID| Cust_Acc| Acc_Type|Cust_ID|Contact_Phone|Cust_Total_Ord
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以删除重复的Cust_ID列,或者我需要在其中写入每个列的名称SELECT吗?我总共有超过50列,所以很难全部写出来。

抱歉,如果这是一个非常愚蠢的问题,我已经检查了以前的类似问题,但无法解决,感谢您的帮助。

Sai*_*aif 7

您需要先从三个表中选择列,然后进行如下内部联接

select 
  t1.cust_id, t1.col1, t1.col2, 
  t2.col1_table2, t2.col2_table2, 
  t3.col1_table3, t3.col2_table3
from
 table1 t1 
inner join
 table2 t2 on t1.cust_id = t2.cust_id
join table3 t3 on t1.cust_id = t3.cust_id
Run Code Online (Sandbox Code Playgroud)

结果如下图所示

在此处输入图片说明


r.a*_*hni 6

您在所有表上都有公共列,因此可以using(common_column)用来删除重复的列。

SELECT * 
FROM table1
LEFT JOIN table2 using(Cust_ID)
LEFT JOIN table3 using(Cust_ID)
LEFT JOIN table4 using(Cust_ID)
Run Code Online (Sandbox Code Playgroud)

我希望有用。


Gor*_*off 1

不,您无法轻松地在 SQL Server 中执行您想要的操作。在其他数据库中,您可以使用该using子句。

您可以做的一件事是从除第一个表之外的所有表中显式选择列:

SELECT t1.*, . . .
FROM table1 t1 LEFT JOIN
     table2 t2
     ON t1.Cust_ID = t2.Cust_ID LEFT JOIN
     table3
     ON t1.Cust_ID = table3.Cust_ID LEFT JOIN
     table4
     ON t1.Cust_ID = table4.Cust_ID;
Run Code Online (Sandbox Code Playgroud)

也许比列问题更重要的是,我更改了连接条件。您正在使用LEFT JOIN,因此第一个表是“驾驶”表。当您说,仅当匹配到 时才t2.Cust_ID = t3.Cust_Id返回 true 。一般来说,您需要使用 中的列,因为它是 s 链中的第一个列。table2table1LEFT JOIN