【发布时间】:2015-04-15 02:31:52
【问题描述】:
我想问一下有没有办法修改我的 SQL Select 语句以防止出现如下所示的冗余行。
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
我意识到冗余行仅在我的集合中有超过 1 个项目时才会出现,其中 cardNO = 'TK 14'.如您所见,冗余行是带有currentQty = 1 的行。我的数据库中没有这样的记录。我认为它只显示为 1,因为它是一个 int 字段。 currentQty 不同,这些并不是真正重复的行,因此我不能使用 DISTINCT 来摆脱它。
我对@987654332@ 的概念不好,但我尝试了各种JOIN 并产生完全相同的结果。
任何帮助表示赞赏!
更新:问题已解决。感谢那些澄清不提供默认整数的 SQL 行为的人。 tblIssueCommsEqp.*,帮我找出了罪魁祸首,并意识到我需要tblIssueCommsEqp.VoucherNo = 10000602 and tblIssueCommsItem.VoucherNo = 1000602 才能得到我想要的。
由于我的概念仍然很薄弱,我仍然不确定为什么如果我在一组中只有一件“TK 14”,一切都会正常进行。
对于帮助修改我的陈述的答案,这些可能也有效,但它们有点作弊,我只会将其用作最后的手段。
【问题讨论】:
-
如果结果出现,tblIssueCommsEqp 中必须有 currentQty = 1 的行。如果您将 tblIssueCommsEqp.* 添加到选择中,您应该能够弄清楚它是哪一行。此外,检查表中的主键/唯一约束以检查连接中是否缺少其中一个。
-
"
the redundant rows are the ones with currentQty as 1. There's no such record in my database." 再看一遍。 必须在currentQty = 1所在的数据库中有记录。即使数据库只是要填充一个默认整数(它不会这样做),默认整数是 0,而不是 1。 -
感谢 JamesZ 和 Joel 的帮助。 tblIssueCommsEqp.* 对我来说是新的,它真的帮助了我,因为我有太多的记录。请把它作为答案。
标签: sql sql-server select join