我有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多列,所以很难写出来。
对不起,如果这是一个非常愚蠢的问题,我已经检查了以前的类似问题,但无法弄清楚并感谢您的帮助。
答案 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
结果如下图所示
答案 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链中的第一个。