MySQL - 结合多个交易的问题和答案

时间:2009-03-30 10:11:54

标签: sql mysql

我在数据库中有以下表格,我用它来存储调查结果:

alt text

每当我在商店(读店)与某人交谈时,我都会创建一个新的交易,其中包含日期/时间(tblTransaction.Created)。每个交易都可以有许多与之相关的问题答案。

我的问题是,2个事务可能都包含对同一个问题的不同答案,我正在尝试创建一个SQL查询/过程,仅返回给定商店的最新问题答案。

以下是一个例子:

我在Some Shop Plc与某人交谈。并在01/01/09(事务ID 1)上创建一个事务。在这个交易中,我问问题1和2.然后在10/01/09我再次与他们交谈,创建一个新的交易(交易ID 2)并回答问题2和3。

我希望能够显示最新答案列表;第一笔交易的问题1和第二笔交易的问题2和3。

1 个答案:

答案 0 :(得分:0)

SELECT
     S.StoreID,
     S.BranchName,
     A.QuestionID,
     T.Created,
     A.*
FROM
     tblStore S
INNER JOIN tblTransaction T ON
     T.StoreID = S.StoreID
INNER JOIN tblAnswer A ON
     A.TransactionID = T.TransactionID AND
     A.StoreID = S.StoreID
WHERE NOT EXISTS
          (
          SELECT
               T2.StoreID,
               A2.QuestionID,
               T2.TransactionID,
               T2.CreatedDate
          FROM
               tblTransaction T2
          INNER JOIN tblAnswer A2 ON
               A2.TransactionID = T2.TransactionID AND
               A2.StoreID = T2.StoreID
          WHERE
               T2.StoreID = T.StoreID AND
               A2.QuestionID = A.QuestionID AND
               T2.CreatedDate > T.CreatedDate
          )

您也可以通过LEFT OUTER以与WHERE子句相同的条件加入子查询并在其中查找NULL值或者您可以从子查询中删除TransactionID并在CreatedDate上使用MAX()并查看与INNER JOIN匹配。

请注意,如果同一商店的多个交易具有相同的创建日期,则可能无法满足您的预期效果。您可能需要根据您在此情况下的业务规则添加其他条件。