2014-01-22 16 views
0

請別人解釋爲什麼存在差異,而不是在

select count(*) from employees where employee_id not in (select manager_id from employees) 

返回0時,顯然,還有一些員工誰是管理者也

我正在使用HR模式。

+0

'manager_id'和'employee_id'是兩個完全不同的鍵,它們很可能有不同的值。 –

+1

在你的表(首席執行官?)中有一個沒有manager_id的僱員,所以你的子查詢包含一個NULL值,這會導致0.這是爲什麼:http://jonathanlewis.wordpress.com/2007/02/25/不在/ –

+0

@RobvanWijk這是一個有效的點! –

回答

0

基於此,它看起來像你試圖鏈接employee_idmanager_id,這可能是不同的。

您可以使用其他一些標準來標識employees表中的管理員,以查詢經理的employee_id值。

SELECT COUNT(*) 
FROM employees 
WHERE employee_id NOT IN 
(
     SELECT employee_id 
     FROM employees 
     WHERE type = 'manager' -- or however you differentiate 
           -- employees and managers 
) 
1

基於查詢我會建議你使用 NOT EXISTS,因爲它給布爾結果隊內最高的性能。

SELECT COUNT(*) 
FROM employees 
WHERE NOT EXISTS 
    (SELECT employee_id 
    FROM employees 
    WHERE type = 'manager' -- or however you differentiate 
    -- employees and managers 
);