2017-06-06 23 views
1

条件としてサブクエリに小さな問題があります。条件文のMySQLサブクエリ

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両方が私のサブクエリからの結果のうちになりたいで:

これは私が把握しようとしているコードです。これを達成するために、サブクエリを2回実行する以外の方法はありませんでした。サブクエリを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`