2011-08-12 28 views
0

以下查詢將生成20行。我試圖消除「類型和版本的」複製版本,但我的回頭率複製排除重複查詢結果中的問題

SELECT DISTINCT 
STR(C.CustomerID, 4) AS 'Customer ID', 
STR(INV.InvoiceNbr, 3) AS 'Invoice Number', 
STR(LINE.FK_StoveNbr, 3) AS 'Stove Number', 
CAST(S.Type + ', ' + S.Version AS CHAR (15)) AS 'Type and Version' 
FROM CUSTOMER C, INVOICE INV, INV_LINE_ITEM LINE, STOVE S 
WHERE INV.FK_CustomerID = C.CustomerID 
AND INV.InvoiceNbr = LINE.FK_InvoiceNbr 
AND SerialNumber = LINE.FK_StoveNbr 
AND C.StateProvince = 'OR' 
ORDER BY 'Type and Version'; 

不管怎樣,我不斷收到在我的結果爐子類型和版本的多個版本。我不確定這是否正確,因爲俄勒岡州只有十個客戶。

回答

0

您使用直接連接,請嘗試切換到左側。

SELECT DISTINCT 
    STR(C.CustomerID, 4) AS 'Customer ID', 
    STR(INV.InvoiceNbr, 3) AS 'Invoice Number', 
    STR(LINE.FK_StoveNbr, 3) AS 'Stove Number', 
    CAST(S.Type + ', ' + S.Version AS CHAR (15)) AS 'Type and Version' 
FROM INVOICE INV, 
    LEFT JOIN CUSTOMER C on (C.CustomerID = INV.FK_CustomerID) 
    LEFT JOIN INV_LINE_ITEM LINE ON (INV.InvoiceNbr = LINE.FK_InvoiceNbr) 
    LEFT JOIN STOVE S ON (S.SerialNumber = LINE.FK_StoveNbr) 
WHERE C.StateProvince = 'OR' 
ORDER BY 'Type and Version'; 

原因是直接連接將所有表視爲主。 1 = 1,左連接讓您設置優先級。所以在我的例子中。 INVOICE是主桌。所有其他表格僅用於填寫額外信息。他們被附上。

希望是有道理的。

+0

另外。你的表命名是有點時髦。通常堅持使用全部小寫字母。不同的db服務器以不同的方式處理大小寫。並以「客戶ID」的形式放置空格。我猜你輸出這些行直接html。但是,您應該確保在HTML(或任何其他顯示)中保留「客戶ID」部分,並在編程方面保留「customer_id」。 –

+0

謝謝。我想知道是否是這樣。我發現YouTube上的一些視頻比我已經使用的書更好地解釋了「左連接」和「內連接」。雖然,我仍然不清楚我是否製作重複的東西。 – krebshack