我有一个非常具体的查询,我可以使用任何帮助进行调试。
此查询涉及4个表。
TRANSACTION_TYPE
Transaction_ID(主要)
TRANSACTION_AMOUNT
Transaction_Type
交易
Transaction_ID(主要)
时间戳
购买
TRANSACTION_ID
的Item_ID
物品
的Item_ID
CLIENT_ID
让我们说有一项交易,其中有人支付20美元现金和0美元信贷,它在表格中插入了两行。
//row 1
Transaction_ID: 1
Transaction_amount: 20.00
Transaction_type: cash
//row 2
Transaction_ID: 1
Transaction_amount: 0.00
Transaction_type: credit
这是具体的查询:
SELECT
tt.Transaction_Amount, tt.Transaction_ID
FROM
ItemTracker_dbo.Transaction_Type tt
JOIN
ItemTracker_dbo.Transaction t
ON
tt.Transaction_ID = t.Transaction_ID
JOIN
ItemTracker_dbo.Purchase p
ON
p.Transaction_ID = tt.Transaction_ID
JOIN
ItemTracker_dbo.Item i
ON
i.Item_ID = p.Item_ID
WHERE
t.TimeStamp >= "2010-01-06 00:00:00" AND t.TimeStamp <= "2010-01-06 23:59:59"
AND
tt.Transaction_Format IN ('cash', 'credit')
AND
i.Client_ID = 3
当我执行此查询时,它会为特定事务返回4行。 (它应该是2)
当我删除所有where子句并插入WHERE tt.Transaction_ID = problematicID时,它只返回两个。
EDIT :::::
在更改日期范围时仍会重复
踢球者:
当我更改初始日期范围时,它只返回特定transaction_id的两行。
::::
这是我使用加入的方式吗?这就是我能想到的......
编辑:这是问题
购买时- 两个sepparate purchase_ID可以具有相同的transaction_ID(purhcase_ID分解特定商品销售)。
purchase_ID中有重复的Transaction_ID行
答案 0 :(得分:1)
我们需要查看所有表中的所有数据,以便能够知道问题所在。但是,因为连接是问题所在,因为当你认为它只有一行时,你的一个表有两行。
答案 1 :(得分:0)
您的架构存在问题。您的行具有相同的transaction_id,这是主键。我认为他们无法在该数据库中标记为主要内容。如果两行具有相同的id,则可能会导致意外的额外行从连接中返回。