2017-06-06 3 views
1

Ich habe ein kleines Problem mit Unterabfragen als Bedingungen.MySQL Unterabfrage in Conditional Statement

Dies ist der Code, den ich versuche, herauszufinden:

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) 

Also meiner WHERE Aussage möchte ich sowohl page und ref unter den Ergebnissen von meiner Unterabfrage sein. Um dies zu erreichen, konnte ich keinen anderen Weg finden, als die Unterabfrage zweimal auszuführen. Gibt es eine andere Möglichkeit, die Unterabfrage nur einmal auszuführen?

+0

Können Sie Beispieldaten und gewünschte Ergebnisse bereitstellen? Dies sieht wie ein ungewöhnliches Datenmodell aus. –

Antwort

1

Unterabfragen sind ultra langsam. Versuchen Sie, diese Abfrage auszuführen:

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`