【问题标题】:Help diagnose bizzare MySQL query behavior帮助诊断奇怪的 MySQL 查询行为
【发布时间】:2010-01-07 18:18:35
【问题描述】:

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

此查询涉及 4 个表。

Transaction_Type
Transaction_ID(主要)
交易金额
交易类型

交易
Transaction_ID(主要)
时间戳

购买
交易 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 = questionsID 时,它只返回两个。

编辑:::::
在更改日期范围时仍然重复 踢球者:

当我更改初始日期范围时,它只返回该特定 transaction_id 的两行。
::::

是我使用join的方式吗?我能想到的就这些了……

编辑:这就是问题

in purchase - 两个单独的 purchase_ID 可以具有相同的 transaction_ID(purhcase_ID 分解特定商品的销售)。

purchase_ID 中有重复的 Transaction_ID 行

【问题讨论】:

  • 您需要发布更多信息。首先,如果您发布从查询中获得的 4 行结果(您认为不正确的结果)会有所帮助。
  • 这是一个典型的“选择没有损坏”(lingpipe-blog.com/2007/06/27/…) 问题:)
  • 哈哈。有趣的阅​​读。如果我的问题是我指责 SELECT,我深表歉意。 99.9999999% 的时间是程序员。

标签: mysql


【解决方案1】:

我们需要查看所有表中的所有数据才能知道问题出在哪里。但是,由于连接是问题所在,这是因为您的一个表有两行,而您认为它只有一行。

【讨论】:

  • 谢谢 - 购买表中有重复的 Transaction_ID 行。这就是它应该的样子。我只需要想出一种不同的方法来选择client_ID
【解决方案2】:

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

【讨论】:

  • 他期望返回两行。困扰他的是 4 行。
  • 当然主键必须是唯一的,否则它们不是键。我认为这里的答案暗示他的表没有正确的配置,并且可能没有配置哪些列构成主键,因此他有重复项。重复和连接很容易为您提供两倍于您预期的行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2011-07-19
  • 2011-04-28
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多