2015-06-09 36 views
2

我想加入兩個我創建的視圖,但是我使用它們的公共字段(cAuditNumber)加入它們。SQL更改視圖名稱/加入

問題是,一旦我完成了連接,它不會讓我創建視圖,因爲它不能有兩次字段名稱cAuditNumber。

cAuditNumber是我應該使用的PK嗎?

我該如何解決這個問題並仍然加入表格?

CREATE VIEW KFF_Sales_Data_Updated AS 
SELECT CustSalesUpdated.*, StkSalesUpdated.* 
FROM CustSalesUpdated 
INNER JOIN StkSalesUpdated 
ON StkSalesUpdated.cAuditNumber = CustSalesUpdated.cAuditNumber 

我得到以下錯誤:

消息4506,級別16,狀態1,過程KFF_Sales_Data_Updated,2號線在每個視圖或函數 列名必須是唯一的。視圖中的列名'cAuditNumber'或函數'KFF_Sales_Data_Updated'被多次指定。

+0

MySQL和tsql?不同的產品... – jarlh

+3

首先你不應該在生產代碼中使用select *。您應該指定每個列名稱。然後,您可以將任何重複的列名稱別名,或者如果它們是多餘的,則可以不包含它們。 – MartianCodeHound

+0

謝謝@MartianCodeHound!你能否詳細說明一下?我是一個初學者用戶 –

回答

1

替換自己的列名,而不是ColumnA,B柱等,但應遵循以下格式:

CREATE VIEW KFF_Sales_Data_Updated AS 
SELECT CustSalesUpdated.cAuditNumber 
    ,CustSalesUpdated.ColumnA 
    ,CustSalesUpdated.ColumnB 
    ,CustSalesUpdated.ColumnC 
    ,StkSalesUpdated.ColumnA as StkColumnA 
    ,StkSalesUpdated.ColumnB as StkColumnB 
    ,StkSalesUpdated.ColumnC as StkColumnC 
FROM CustSalesUpdated 
INNER JOIN StkSalesUpdated 
ON StkSalesUpdated.cAuditNumber = CustSalesUpdated.cAuditNumber 

你只需要別名重複使用列「作爲」,或者你可以用它來重命名任何你想要的列。

+0

謝謝大家!非常感激 –

0
CREATE VIEW KFF_Sales_Data_Updated AS 
SELECT csu.cAuditNumber cAuditNumber1 , ssu.cAuditNumber cAuditNumber2 
FROM CustSalesUpdated csu 
INNER JOIN StkSalesUpdated ssu 
ON StkSalesUpdated.cAuditNumber = CustSalesUpdated.cAuditNumber 

你可以在select語句從兩個表中添加任何其他列,但如果有兩個列具有相同的名稱,你應該給他們別名

0

使用select *是一般不好的做法。另一方面,alias表名和列是一種很好的做法。特別是在你的情況下,你的表名以及相同的列名(跨兩個表)可以使用別名。數據庫對哪個​​來自哪裏感到困惑。所以,別名派上用場。

CREATE VIEW KFF_Sales_Data_Updated 
AS 
SELECT 
    csu.cAuditNumber 
    ,csu.Col1 
    ,csu.Col2 
    ,csu.Col3 
    ,ssu.Col1 AS StkCol1 
    ,ssu.Col2 AS StkCol2 
    ,ssu.Col3 AS StkCol3 
FROM CustSalesUpdated csu 
INNER JOIN StkSalesUpdated ssu ON csu.cAuditNumber = ssu.cAuditNumber