2016-04-07 8 views
-2

SQL Statement:Wie Datensätze mit einer bestimmten Bedingung in MySQL abrufen?

SELECT 
    b.*, 
    e.Lastname, 
    e.Firstname, 
    e.ID_SC, 
    e.Program, 
    r.BReasonDetails 
FROM 
    tblbadgetemporaryborrower b 
     INNER JOIN 
    (SELECT 
     e.*, p.Program 
    FROM 
     tblemployee e 
    INNER JOIN tblemployeeprogram p ON p.ID_P = e.ID_P) e ON e.EmployeeID = b.EmployeeID 
     INNER JOIN 
    tblbadgetemporaryborrowerreason r ON r.ID_BR = b.ID_BR 
HAVING e.ID_SC = {$_GET['ID_SC']} 
ORDER BY b.EmployeeID ASC 

F: nur Wie kann ich die Mitarbeiterdaten mit Lost Grunde abrufen und das Auftreten davon zählen.

screenshot

Erwartete Ausgabe:

100827038 | Larrazabal, Victor Ceasar | 4 (`Lost` count) 

Antwort

1

Alles, was Sie tun müssen, ist fügen Sie eine WHERE-Klausel zu Ihrer Anfrage

SELECT 
     b.*, 
     e.Lastname, 
     e.Firstname, 
     e.ID_SC, 
     e.Program, 
     r.BReasonDetails 
     FROM tblbadgetemporaryborrower b 
     INNER JOIN (
        SELECT e.*, p.Program 
        FROM tblemployee e 
         INNER JOIN tblemployeeprogram p ON p.ID_P = e.ID_P 
        ) e ON e.EmployeeID = b.EmployeeID 
     INNER JOIN tblbadgetemporaryborrowerreason r ON r.ID_BR = b.ID_BR 

     WHERE r.BReasonDetails = 'Lost' 

     HAVING e.ID_SC = {$_GET['ID_SC']} 
     ORDER BY b.EmployeeID ASC 
+0

meine Phantasie steigern, danke alle Eingaben half mir :) –

1

Zuerst in Ihre vorhandene Abfrage, können Sie Verwenden Sie where statt having. Außerdem möchten Sie die Unterabfrage nicht in der Klausel FROM. Dann können Sie diese mit einem anderen Zustand ergänzen:

SELECT b.*, e.Lastname, e.Firstname, e.ID_SC, p.Program, r.BReasonDetails 
FROM tblbadgetemporaryborrower b INNER JOIN 
    tblemployee e 
    e.EmployeeID = b.EmployeeID JOIN 
    tblemployeeprogram p 
    ON p.ID_P = e.ID_P INNER JOIN 
    tblbadgetemporaryborrowerreason r 
    ON r.ID_BR = b.ID_BR 
WHERE e.ID_SC = {$_GET['ID_SC']} AND 
     EXISTS (SELECT 1 
       FROM tblbadgetemporaryborrowerreason r2 
       WHERE r2.ID_BR = b.ID_BR AND r2.BReasonDetails = 'Lost' 
      ) 
ORDER BY b.EmployeeID ASC; 

EDIT:

Ich dachte, Sie alle Zeilen wollte, wo jede Lost war. Aber ich sehe, dass Sie eine Aggregationsanfrage tun:

SELECT b.*, e.Lastname, e.Firstname, COUNT(*) as LostCount 
FROM tblbadgetemporaryborrower b INNER JOIN 
    tblemployee e 
    e.EmployeeID = b.EmployeeID JOIN 
    tblemployeeprogram p 
    ON p.ID_P = e.ID_P INNER JOIN 
    tblbadgetemporaryborrowerreason r 
    ON r.ID_BR = b.ID_BR 
WHERE e.ID_SC = {$_GET['ID_SC']} AND r.BReasonDetails = 'Lost' 
GROUP BY b.EmployeeId 
+0

ich verwende 'Having', weil ich die Vorkommen dieser Mitarbeiter werden zu zählen, die hat 'verlorener 'Grund kann ich das tun, indem wo? –

+1

@MattMagallo. . . Ja. Normalerweise verwenden Sie 'Haben' nur, wenn Sie eine Aggregation durchführen. MySQL erweitert den Einsatz ebenfalls, ist aber hier nicht notwendig. –

+0

danke für die Klarstellung :) –

Verwandte Themen