帮助诊断bizzare MySQL查询行为

时间:2010-01-07 18:18:36

标签: mysql

我有一个非常具体的查询,我可以使用任何帮助进行调试。

此查询涉及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行

2 个答案:

答案 0 :(得分:1)

我们需要查看所有表中的所有数据,以便能够知道问题所在。但是,因为连接是问题所在,因为当你认为它只有一行时,你的一个表有两行。

答案 1 :(得分:0)

您的架构存在问题。您的行具有相同的transaction_id,这是主键。我认为他们无法在该数据库中标记为主要内容。如果两行具有相同的id,则可能会导致意外的额外行从连接中返回。