我无法从以下查询中删除嵌套部分:

    SELECT DISTINCT * FROM `audit` WHERE action_performed = 'REJECTED' AND `event_id` IN (
        SELECT DISTINCT event_id AS `Count`
        FROM `audit`
        WHERE username = 'someUser'
        AND action_performed IN ('SUBMITTED_FOR_APPROVAL', 'SAVED_AND_APPROVED')
        AND (action_timestamp >= '2012-01-12 00:00:00' AND action_timestamp <= '2012-01-24 23:59:59'))

基本上,我试图获取用户之前提交的被拒绝事件的数量。我通过action_performed列来确定这一点,该列的值如下
SUBMITTED_FOR_APPROVALSAVED_AND_APPROVEDREJECTED
我之所以要删除嵌套部分,是因为audit表当前包含超过100k行,而嵌套查询本身的结果约为2000行,因此查询总是超时。
我试过在网站上搜索,并按照一些问题中的建议进行内部连接,但可能我做错了!
谢谢您。
编辑-表结构如下
Field              Type
id                 int(11)
username           varchar(100)
event_id           int(11)
action_performed   varchar(100)
action_timestamp   timestamp

最佳答案

SELECT DISTINCT adata.*
FROM  `audit` AS adata
INNER JOIN `audit` AS aselector ON adata.event_id=aselector.event_id
WHERE
  adata.action_performed = 'REJECTED'
  AND aselector.username = 'someUser'
  AND aselector.action_performed IN ('SUBMITTED_FOR_APPROVAL', 'SAVED_AND_APPROVED')
  AND aselector.action_timestamp >= '2012-01-12 00:00:00'
  AND aselector.action_timestamp <= '2012-01-24 23:59:59'
;

关于mysql - 从SELECT查询中删除嵌套部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8987392/

10-11 01:40
查看更多