我一直试图从以下查询中删除嵌套部分:
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_APPROVAL
,SAVED_AND_APPROVED
和REJECTED
。
我想删除嵌套部分的原因是因为audit
表当前包含超过100k行,嵌套查询本身的结果大约是2000行,因此查询总是超时。
我尝试在网站上搜索,并按照一些问题的建议进行内部加入,但也许我做错了! 谢谢。
编辑 - audit
表格结构如下
Field Type
id int(11)
username varchar(100)
event_id int(11)
action_performed varchar(100)
action_timestamp timestamp
答案 0 :(得分:1)
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'
;
答案 1 :(得分:1)
在您尝试过的查询中,您将表格与id
字段(ON a.id = a2.id
)相关联,但在第一个查询中,它们与event_id
相关联。这似乎是一个问题,所以请尝试ON a.event_id = a2.event_id
。
答案 2 :(得分:0)
SELECT DISTINCT AuditTable.event_id, ... -- add other fields here
FROM `audit` AS AuditTable
INNER JOIN `audit` AS AuditTableB ON AuditTable.event_id=aselector.event_id
WHERE
AuditTable.action_performed = 'REJECTED'
AND AuditTableB.username = 'someUser'
AND AuditTableB.action_performed IN ('SUBMITTED_FOR_APPROVAL', 'SAVED_AND_APPROVED')
AND (AuditTableB.action_timestamp BETWEEN '2012-01-12 00:00:00' AND '2012-01-24 23:59:59')