条件语句中的MySQL子查询

时间:2017-06-06 10:33:28

标签: mysql sql subquery conditional-statements

我的子查询作为条件存在一个小问题。

这是我想弄清楚的代码:

  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语句中,我希望pageref都是我的子查询的结果。为了实现这一点,除了两次运行子查询之外,我找不到任何其他方法。还有另一个选项让子查询只执行一次吗?

1 个答案:

答案 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`
相关问题