2017-02-15 3 views
1
select EmpName, EmpCode 
from employees 
where EmpBrnID = 461 and EmpIsActive =1 
    and EmpCode not in (select EmpCode from reports 
         where BranchID = 461 and DAYOFWEEK(InTime)!= 1 
         and InTime BETWEEN '2017-01-31'- INTERVAL 6 DAY AND '2017-01-31'); 

Wie kann ich dies als beitreten schreiben.Wie schreibe ich Sub-Abfrage nicht null als Join

+0

Warum würden Sie? Wie auch immer, Sie suchen nach einem ** Anti-Join **. –

+0

@Ramanil Sie brauchen hier kein 'JOIN'. Sie möchten Daten von nur einer Tabelle, und warum würden Sie sie dann mit einer anderen Tabelle verbinden? –

+0

Sub-Abfrage dauert mehr Zeit, um Ergebnisse zu erhalten, so dass ich join.how schreiben möchte, um Daten schnell mit Sub-Abfrage zu erhalten. @ Jibin Balachandran – Ramanil

Antwort

0
select EmpName, EmpCode 
from employees 
left join reports on reports.EmpCode = employees.EmpCode 
    and BranchID = 461 and DAYOFWEEK(InTime)!= 1 
         and InTime BETWEEN '2017-01-31'- INTERVAL 6 DAY AND '2017-01-31' 
where EmpBrnID = 461 and EmpIsActive =1 
    and reports.EmpCode IS NULL 
1

Meinst du sowas?

SELECT 
    empname 
, empcode 
FROM employees e 
LEFT JOIN reports r 
    ON e.empbrnid=r.branchid 
WHERE e.empbrnid=461 
    AND DAYOFWEEK(intime)!=1 
    AND InTime BETWEEN '2017-01-31'- INTERVAL 6 DAY AND '2017-01-31') 
    AND r.branchid IS NULL 
; 

Es ist also ein linker Join, wo die Spalten der richtigen Tabelle NULL sind.

Beifall -

Marco die Sane

Verwandte Themen