我的子查询作为条件存在一个小问题。
这是我想弄清楚的代码:
SELECT `page`
FROM `mdl_tool_devcourse`
WHERE `page` IN
(SELECT `objectid`
FROM `mdl_logstore_standard_log`
WHERE `action` = 'viewed' AND `objecttable` = 'wiki_pages' AND `userid` = 2)
AND `ref` IN
(SELECT `objectid`
FROM `mdl_logstore_standard_log`
WHERE `action` = 'viewed' AND `objecttable` = 'wiki_pages' AND `userid` = 2)
因此,在我的WHERE语句中,我希望page
和ref
都是我的子查询的结果。为了实现这一点,除了两次运行子查询之外,我找不到任何其他方法。还有另一个选项让子查询只执行一次吗?
答案 0 :(得分:1)
子查询超慢。尝试运行该查询:
SELECT
`mdl_tool_devcourse`.`page`
FROM `mdl_tool_devcourse`
INNER JOIN `mdl_logstore_standard_log` ON `mdl_logstore_standard_log`.`action` = 'viewed'
AND `mdl_logstore_standard_log`.`objecttable` = 'wiki_pages'
AND `mdl_logstore_standard_log`.`userid` = 2
AND `mdl_tool_devcourse`.`page` = `mdl_logstore_standard_log`.`objectid`
AND `mdl_tool_devcourse`.`page` = `mdl_logstore_standard_log`.`ref`