2017-05-29 197 views
1

我正在嘗試使用左連接編寫簡單的SQL查詢。SQL - 左連接中的表別名

這是查詢:

SELECT * 
FROM ( 
    SELECT * 
    FROM TRN_IN.COIT AS TRANSMISSIONS 
    LEFT JOIN ( 
     SELECT TRNNumber ,COUNT(ID) 
     FROM TRN_IN.COIT AS TOTAL_LINES 
     WHERE DataPiece02 = 'TO' 
     GROUP BY TRNNumber 
    ) ON TRANSMISSIONS.TRNNumber = TOTAL_LINES.TRNNumber 
) 

二表的別名是TOTAL_LINES。

運行時,出現TOTAL_LINES未列出的錯誤。

奇怪的是,當試圖運行本身的第二個查詢,也沒有任何錯誤:

(SELECT TRNNumber ,COUNT(ID) 
FROM TRN_IN.COIT AS TOTAL_LINES 
WHERE DataPiece02 = 'TO' 
GROUP BY TRNNumber) 

任何人有線索?

回答

3

希望你在錯誤的地方分配AS TOTAL_LINES表別名。

在第二個子查詢後放置表別名可以解決您的問題。

你可以試試下面的查詢:

SELECT * 
FROM (
    SELECT * 
    FROM TRN_IN.COIT AS TRANSMISSIONS 
    LEFT JOIN (
     SELECT TRNNumber 
      ,COUNT(ID) AS CountDetails 
     FROM TRN_IN.COIT 
     WHERE DataPiece02 = 'TO' 
     GROUP BY TRNNumber 
     ) AS TOTAL_LINES ON TRANSMISSIONS.TRNNumber = TOTAL_LINES.TRNNumber 
    ) AS Result 
1

TOTAL_LINES必須是整個選擇的別名,而不是在FROM子句中的表。更改爲:

SELECT * FROM (SELECT * FROM TRN_IN.COIT AS TRANSMISSIONS 

LEFT JOIN (SELECT TRNNumber ,COUNT(ID) FROM TRN_IN.COIT WHERE DataPiece02 = 'TO' GROUP BY TRNNumber) AS TOTAL_LINES 

ON TRANSMISSIONS.TRNNumber = TOTAL_LINES .TRNNumber) 
1

試試這個..

SELECT TOTAL_LINES.TRNNumber,COUNT(TOTAL_LINES.ID) FROM TRN_IN.COIT TRANSMISSIONS LEFT JOIN TRN_IN.COIT TOTAL_LINES 
ON TRANSMISSIONS.TRNNumber = TOTAL_LINES.TRNNumber 
WHERE TOTAL_LINES.DataPiece02 = 'TO' GROUP BY TOTAL_LINES.TRNNumber; 
+0

不要只添加代碼。也添加一個解釋 – Jens