我想問問是否有辦法修改我的SQL Select語句以防止冗餘行如下所示。SQL中的冗餘行選擇加入
SELECT tblIssueCommsItem.ItemID, cardNo, tblIssueCommsEqp.currentQty FROM tblIssueCommsItem
INNER JOIN tblCommsItem ON tblIssueCommsItem.ItemID = tblCommsItem.ItemID
INNER JOIN tblIssueCommsEqp ON tblIssueCommsItem.EqpID = tblIssueCommsEqp.EqpID
INNER JOIN tblSetInfo ON tblSetInfo.EqpID = tblIssueCommsEqp.EqpID
WHERE SetID = 11 AND (cardNo = 'TK 14' OR cardNo = '') AND cardNo != 'Unassigned'
AND tblIssueCommsItem.VoucherNo = 10006102 AND tblIssueCommsEqp.currentQty > 0
ORDER BY cardNo, serial
我得到什麼:
ItemID: 1386, cardNO: *blank*, currentQty: 10
ItemID: 1386, cardNO: *blank*, currentQty: 1
ItemID: 1387, cardNO: *blank*, currentQty: 10
ItemID: 1387, cardNO: *blank*, currentQty: 1
ItemID: 1101, cardNO: TK 14, currentQty: 10
ItemID: 1101, cardNO: TK 14, currentQty: 1
ItemID: 2575, cardNO: TK 14, currentQty: 10
ItemID: 2575, cardNO: TK 14, currentQty: 1
SetInfo
包含屬於一組不同的EqpIDs
。在這種情況下,集是SetID
11.我想實現的是以下幾點:
ItemID: 1386, cardNO: *blank*, currentQty: 10
ItemID: 1387, cardNO: *blank*, currentQty: 10
ItemID: 1101, cardNO: TK 14, currentQty: 10
ItemID: 2575, cardNO: TK 14, currentQty: 10
我實現了冗餘行只有當我在一組,由此cardNO = 'TK 14'
有超過1個項目出現。如您所見,冗餘行是currentQty = 1
。我的數據庫中沒有這樣的記錄。我認爲它只顯示爲1,因爲它是一個int
字段。與currentQty
是不同的,這些不是真正重複的行,因此我不能使用DISTINCT
擺脫它。
我的JOIN
的概念不好,但我嘗試了各種各樣的JOIN
它產生完全相同的結果。
任何幫助表示讚賞!
更新:問題已解決。感謝那些澄清了不提供默認整數的SQL行爲的人。 tblIssueCommsEqp.*
,幫助我找出罪魁禍首,並意識到我需要兩個tblIssueCommsEqp.VoucherNo = 10000602 and tblIssueCommsItem.VoucherNo = 1000602
才能得到我想要的。由於我的概念仍然很薄弱,我仍然不確定爲什麼如果我在一組中只有1件'TK 14',一切都按正常方式工作。
對於幫助修改我的陳述的答案,這些答案可能也有用,但它們有點作弊,我只會用它作爲最後的手段。
必須有tblIssueCommsEqp行(多個)具有currentQty = 1,如果其涉及到的結果。如果將tblIssueCommsEqp。*添加到select中,您應該能夠確定它是哪一行。另外,檢查表中的主鍵/唯一約束,以檢查它們中的一個是否從聯接中缺失。 「 –
」'冗餘行是currentQty爲1的行。在我的數據庫中沒有這樣的記錄。''再看一次,**必須在數據庫中有'currentQty = 1'的記錄,即使數據庫只是填充默認整數(它不會做),默認整數是0,不是1. –
感謝您的幫助,JamesZ和Joel。tblIssueCommsEqp。*對我來說是新的,因爲我有太多記錄,所以真的幫了我很大忙,請把它當作答案。 – DxHito