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列,所以很难全部写出来。
抱歉,如果这是一个非常愚蠢的问题,我已经检查了以前的类似问题,但无法解决,感谢您的帮助。
您需要先从三个表中选择列,然后进行如下内部联接
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)
结果如下图所示
您在所有表上都有公共列,因此可以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)
我希望有用。
不,您无法轻松地在 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