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

时间:2017-01-30 02:06:07

标签: sql sql-server join

我有4个表,其中一列在所有表中都很常见。有没有办法创建一个视图,我可以在同一列中连接所有表,我只看到公共列一次。

我们说我有table1

Cust ID | Order ID | Product_Name

表2

Cust_ID | Cust_Name | Cust_Address

表3

Cust_ID | Cust_Acc | Acc_Type

表4

Cust_ID | Contact_Phone | Cust_Total_Ord

以下是我用来连接表格的代码;

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

我得到了所有加入的表格,我在每个表格中看到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

有没有办法删除重复的Cust_ID列,还是需要在SELECT中编写每个列名?我总共有50多列,所以很难写出来。

对不起,如果这是一个非常愚蠢的问题,我已经检查了以前的类似问题,但无法弄清楚并感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

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

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

结果如下图所示

enter image description here

答案 1 :(得分:1)

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

SELECT * 
FROM table1
LEFT JOIN table2 using(Cust_ID)
LEFT JOIN table3 using(Cust_ID)
LEFT JOIN table4 using(Cust_ID)

我希望那很有用。

答案 2 :(得分:0)

不,您无法轻松地在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;

也许比列问题更重要,我改变了连接条件。您正在使用LEFT JOIN,因此第一个表格是“驾驶”表格。当您说t2.Cust_ID = t3.Cust_Id时,仅当与table2 匹配时,才会返回true 。通常,您希望使用table1中的列,因为它是LEFT JOIN s链中的第一个。