簡體   English   中英

條件使用LEFT JOIN從查詢中排除行

[英]Condition excludes rows from query with LEFT JOIN

我有一個聲明,我試圖用來檢索完整的員工列表,然后是他們的假期。 即使他們沒有假期,我也想留住員工。 這是我到目前為止的發言;

SELECT emp.em_pplid, emp.em_name
FROM employs emp
LEFT JOIN people ppl ON emp.em_pplid = ppl.pp_id
LEFT JOIN empwork ew ON emp.em_pplid = ew.ew_pplid
WHERE emp.em_deptid = ?
AND ppl.pp_employee = ?
AND emp.em_type < ?
AND ew.ew_from > ?
ORDER BY emp.em_name"

這是AND ew.ew_from = ? 這將刪除沒有存儲在empwork表中的假期的員工。 即使在empwork表中沒有假期,如何讓員工表中的所有人員都擁有我想要的部門ID?

您的where子句將left join轉換為inner join 將條件放入聯接的on子句中。

SELECT emp.em_pplid, emp.em_name
FROM employs emp
LEFT JOIN people ppl ON emp.em_pplid = ppl.pp_id                        
LEFT JOIN empwork ew ON emp.em_pplid = ew.ew_pplid
                    AND ew.ew_from > ?
WHERE emp.em_deptid = ?
AND emp.em_type < ?
AND (ppl.pp_employee IS NULL OR ppl.pp_employee = ?)
ORDER BY emp.em_name

應該僅在ON子句內指定LEFT JOIN 表上的條件。 如果不是,則由於NULL比較,連接會自動轉換為INNER JOIN

SELECT emp.em_pplid, emp.em_name
FROM employs emp
LEFT JOIN people ppl
 ON emp.em_pplid = ppl.pp_id AND ppl.pp_employee = ?
LEFT JOIN empwork ew 
 ON emp.em_pplid = ew.ew_pplid AND ew.ew_from > ?
WHERE emp.em_deptid = ?
AND emp.em_type < ?
ORDER BY emp.em_name"

如果我理解這個問題,這可能有效:

SELECT emp.em_pplid, emp.em_name
FROM employs emp
LEFT JOIN people ppl ON emp.em_pplid = ppl.pp_id
LEFT JOIN empwork ew ON emp.em_pplid = ew.ew_pplid
WHERE emp.em_deptid = ?
AND ppl.pp_employee = ?
AND emp.em_type < ?
AND (ew.ew_from > ? OR ew.ew_from IS NULL)
ORDER BY emp.em_name"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM