两张桌不相等

时间:2012-02-03 16:52:02

标签: php

我有一个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?

4 个答案:

答案 0 :(得分:7)

尝试使用<>代替!=

编辑问题的编辑答案:

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 ;

答案 1 :(得分:4)

好的,根据你的评论,我认为这就是你想要的:

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的所有记录以及不具有匹配用户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

注意:假设用户表是唯一的,'DISTINCT'是多余的。

答案 2 :(得分: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表中的任何内容。所以我不清楚是否需要首先加入它?

答案 3 :(得分:0)

你也可以尝试这个

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