2017-01-03 2 views
0

Hallo Ich mag würde wissen, wie ich das Ergebnis der Unterabfrage zugreifen kann und es als Bedingung in der HauptabfrageSumme aus Sub-Abfrage innerhalb WHERE-Bedingung

Hier ist meine Abfrage-Code verwenden:

SELECT m.*, dp.department as dep, 
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) FROM time_management tm WHERE tm.user = m.id AND MONTH(`date`) = MONTH(CURRENT_DATE()) AND YEAR(`date`)= YEAR(CURRENT_DATE())) as time 
FROM members m 
LEFT JOIN department dp ON m.department = dp.id 
WHERE m.department = $departmentvar AND tm.time > 34 

Wie Sie sehen, ich letzte Bedingung in der WHERE-Klausel Zeit zu haben, ich versuche nur, die Ergebnisse zu wählen, welche Summe ist größer als 34.

ist das möglich mit Sub-Abfrage?

Jede Hilfe ist willkommen. Vielen Dank.

+0

Warum haben Sie nicht einfach eine "Having-Klausel" auf der Unterabfrage ... '... UND JAHR (Datum) = YEAR (CURRENT_DATE()) HABEN SEC_TO_TIME (SUMME (TIME_TO_SEC (Zeit)))> 34' – xQbert

+0

@ xQbert. . . Weil dieser Ausdruck in einer Unterabfrage steht. –

+0

hmm ... Ich muss es vielleicht versuchen mySQLs Implementierung ist ein bisschen anders. – xQbert

Antwort

2

MySQL erweitert die Verwendung der HAVING Klausel, so dass Sie die Abfrage schreiben kann als:

SELECT m.*, dp.department as dep, 
     (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) 
     FROM time_management tm 
     WHERE tm.user = m.id AND 
       MONTH(`date`) = MONTH(CURRENT_DATE()) AND 
       YEAR(`date`) = YEAR(CURRENT_DATE()) 
     ) as time 
FROM members m LEFT JOIN 
    department dp 
    ON m.department = dp.id 
WHERE m.department = $departmentvar 
HAVING time > 34; 

Die time in der HAVING Klausel sollte als die in der SELECT definiert alias interpretiert werden.

In den meisten anderen Datenbanken würden Sie eine Unterabfrage verwenden. MySQL materialisiert jedoch Unterabfragen, was zusätzlichen Overhead verursacht.

Auch ich glaube nicht, dass die LEFT JOIN hier benötigt wird - es sei denn, Sie haben Abteilungen, die nicht in der departments Tabelle sind.

+0

letzter Satz ist ein bisschen aus. vielleicht --- --- außer Sie haben Mitglieder, die keine Abteilung haben. – xQbert

+0

@xQbert. . . Es ist seltsamer als das wegen der Wo-Klausel. Es müsste eine gültige (d. H. "Nicht-NULL") Abteilungs-ID in "Mitgliedern" geben, die keinen entsprechenden Wert in "Abteilung" hätte. –

Verwandte Themen