【问题标题】:MySQL Subquery in Conditional Statement条件语句中的 MySQL 子查询
【发布时间】:2017-11-07 07:56:12
【问题描述】:

我在将子查询作为条件时遇到了一个小问题。

这是我要弄清楚的代码:

  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 都在我的子查询的结果中。为了实现这一点,我找不到任何其他方法,只能运行两次子查询。是否有另一种选择让子查询只执行一次?

【问题讨论】:

  • 你能提供样本数据和想要的结果吗?这看起来像一个不寻常的数据模型。

标签: mysql sql subquery conditional-statements


【解决方案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`

【讨论】:

    猜你喜欢
    • 2011-07-06
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2011-11-05
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多