我有一个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 :(得分: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;