2015-11-03 46 views
2

多次我寫了一個這樣的查詢:列「TRANSACTION_EVENT_ID」被指定爲「YY」

SELECT 
    YY.ACCOUNT_ID, 
    YY.TRANSACTION_EVENT_ID 
FROM 
    (SELECT * 
    FROM dbo.TRANSACTION TE 
    JOIN dbo.FUND_TRANSACTION FT 
    ON TE.TRANSACTION_EVENT_ID = FT.TRANSACTION_EVENT_ID 
    JOIN ACCOUNT A 
    ON FT.ACCOUNT_ID = A.ACCOUNT_ID) AS YY 

,並收到錯誤是這樣的:

指定的列「TRANSACTION_EVENT_ID」多次爲 'YY'

選中此:SQL The column 'Id' was specified multiple times

但是,問題沒有解決。我究竟做錯了什麼?

+3

避免'SELECT * FROM' - 指定要選擇的列名稱。從您的查詢中,您將從'dbo.TRANSACTION'獲得2個TRANSACTION_EVENT_ID,並從'dbo.FUND_TRANSACTION'獲得另一個。所以有混亂。 – Abhishek

回答

5

問題出在SELECT *。由於可以在選擇中重複相同的列名稱。

明確提及列名稱。以下查詢將起作用。

SELECT YY.ACCOUNT_ID, YY.TRANSACTION_EVENT_ID 
FROM ( SELECT FT.ACCOUNT_ID, FT.TRANSACTION_EVENT_ID 
     FROM dbo.[TRANSACTION] TE 
     JOIN dbo.FUND_TRANSACTION FT ON TE.TRANSACTION_EVENT_ID = FT.TRANSACTION_EVENT_ID 
     JOIN ACCOUNT A ON FT.ACCOUNT_ID = A.ACCOUNT_ID 
    ) AS YY 
2

您必須指定要從哪個表TRANSACTION_EVENT_ID中選擇。您必須使用別名/表名指定列列表,而不是*。例如:

SELECT 
    YY.ACCOUNT_ID, 
    YY.TRANSACTION_EVENT_ID 
FROM 
    (SELECT A.ACCOUNT_ID, 
      TE.TRANSACTION_EVENT_ID 
    FROM dbo.TRANSACTION TE 
    JOIN dbo.FUND_TRANSACTION FT 
    ON TE.TRANSACTION_EVENT_ID = FT.TRANSACTION_EVENT_ID 
    JOIN ACCOUNT A 
    ON FT.ACCOUNT_ID = A.ACCOUNT_ID) AS YY