我有两张表userprofile
和deviceid
。
userprofile
包含username
,studentname
deviceid
包含username
,device id
我想从userprofile
获取不在deviceid
(username
)的用户名记录。
我的查询是
SELECT
userprofile.username, userprofile.studentname
FROM
userprofile
LEFT JOIN
deviceid ON deviceid.username = userprofile.username
WHERE
deviceid.username IS NULL;
它没有取任何值。
答案 0 :(得分:3)
你的措辞实际上是确切的方法:
我想从userprofile获取不在deviceid(用户名)
中的用户名记录
现在,我们只需将其放入SQL:
SELECT username
FROM userprofile
WHERE username NOT IN (SELECT username FROM deviceid)
答案 1 :(得分:1)
这就是我通常的做法
select * from userprofile a where not exists (select 1 from device b where a.username = b.username)
答案 2 :(得分:0)
你几乎接近解决方案
SELECT userprofile.username,userprofile.studentname FROM userprofile
LEFT OUTER JOIN deviceid ON deviceid.username = userprofile.username
WHERE deviceid.username IS NULL;
UNOIN ALL
SELECT userprofile.username,userprofile.studentname FROM deviceid
LEFT OUTER JOIN userprofile ON deviceid.username = userprofile.username
WHERE deviceid.username IS NULL;
其他类型的解决方案试试这个Fiddle
希望这可能有用
答案 3 :(得分:0)
在您的查询中,您正在过滤where子句中的左连接表。这会将左连接更改为内连接。要使用您的方法,请在join子句中进行过滤。在您的具体情况下,您所要做的就是将“where”改为“and”。
Mureinik的回答也会奏效,但可能会很慢。 Hans Kilian的回答也会奏效。
答案 4 :(得分:0)
您需要获取userprofile中的值,然后尝试以下代码
select username,studentname
from userprofile
where upper(username) not in (select upper(username) from deviceid);
以上查询位于 Oracle 。它将返回不在deviceid中的userprifile的详细信息