2012-02-03 76 views
2

我有一個SQL查詢,這裏是我卡住的部分。兩個表不相等

$query = "SELECT DISTINCT user.firstname, user.lastname, user.userid FROM user, staff WHERE user.type = 'Staff' AND staff.userid!= user.userid"; 

出於某種原因,它只打印出用戶是員工的部分,但是!=不工作,就好像我刪除了!並且只有staff.user_id = user.user_id它可以工作並打印出在這兩個表中的所有用戶?

有人可以請解釋爲什麼會發生這種情況,並有一個解決方案。

編輯

TABLE USER      TABLE STAFF 
ID - NAME - TYPE    ID -  NUMBER 
1 - A - Staff    1 -  11111 
2 - B - Staff    2 -  22222 
3 - C - Customer 
4 - D - Customer 
5 - E - Staff 
6 - F - Staff 

我將如何找到用戶ID 5和6?

+0

您使用的是什麼數據庫引擎? – Jamie

+0

@好吧,我編輯了我的答案,以反映修改後的問題。 – dgw

回答

6

嘗試<>而不是!=

的編輯問題編輯答案:

SELECT user.firstname, user.lastname, user.userid 
FROM user LEFT JOIN staff ON user.userid=staff.userid 
WHERE user.type = 'Staff' AND staff.userid IS NULL ; 
+0

我同意,<>是形式語法,大多數SQL數據庫支持!=,因爲它是常見的編碼術語,但它不是不等於的正式語法。 – TravisO

+0

@Will您想要的輸出是什麼? – dgw

+0

@你是否希望用'type ='Staff''標記的'user'不在staff表中? – dgw

2

目前尚不清楚你要完成的任務。您要加入兩個表格(用戶和工作人員)並使用加入條件,其中用戶類型是員工,用戶和員工表格之間的用戶標識不匹配。

使用JOIN語法,你說

SELECT DISTINCT user.firstname, user.lastname, user.userid 
FROM user u 
JOIN staff s ON (s.userid != u.userid) 
WHERE u.type = 'Staff' 

但你不使用你選擇從STAFF表什麼。所以我不清楚首先需要加入它嗎?

+0

我有用戶表與用戶的詳細信息,ID和類型字段將是工作人員或客戶。工作人員表將具有ID和員工編號。我想要做的是列出所有不在員工表中的員工?使用user.userid = staff.userid,將打印員工和用戶表中的所有員工,但我希望員工表中不在員工表中的員工。如果你知道我的意思 –

+0

對不起,我盡我所能解釋。 –

4

OK,根據您的意見,我覺得這是你想要什麼:

SELECT DISTINCT user.firstname, user.lastname, user.userid 
FROM user u 
LEFT JOIN staff s ON (s.userid = u.userid) 
WHERE (s.userid is null) AND (u.type = 'Staff') 

的左連接會發現有一個匹配的用戶ID,併爲那些用戶表(左表)中的所有記錄那不。

所以修改查詢

SELECT * 
FROM user u 
LEFT JOIN staff s ON (s.userid = u.userid) 

將返回

 
1 - A - Staff    1 -  11111 
2 - B - Staff    2 -  22222 
3 - C - Customer   NULL NULL NULL 
4 - D - Customer   NULL NULL NULL 
5 - E - Staff    NULL NULL NULL 
6 - F - Staff    NULL NULL NULL 

增加的部分WHERE子句

SELECT * 
    FROM user u 
    LEFT JOIN staff s ON (s.userid = u.userid) 
    WHERE (s.userid is null) 

將返回:

 
3 - C - Customer   NULL NULL NULL 
4 - D - Customer   NULL NULL NULL 
5 - E - Staff    NULL NULL NULL 
6 - F - Staff    NULL NULL NULL 

最後完整的查詢將返回

SELECT * 
    FROM user u 
    LEFT JOIN staff s ON (s.userid = u.userid) 
    WHERE (s.userid is null) AND (u.type = 'Staff') 

將返回:

 
5 - E - Staff    NULL NULL NULL 
6 - F - Staff    NULL NULL NULL 

注:假設用戶表是唯一的, '獨特' 是多餘的。

2
You can try this also 

SELECT user.firstname, user.lastname, user.userid FROM user,staff where user.userid=staff.userid and user.type = 'Staff' AND staff.userid IS NULL;