mysql查询一个表中的WHERE而不是另一个表

Har*_*ina 3 mysql sql

编辑:这样做:

  SELECT DISTINCT profileid 
FROM profilesrelevation 
WHERE profileid NOT IN (
  SELECT profileid FROM profiles
)
Run Code Online (Sandbox Code Playgroud)

我需要获取profilesrelevation表中存在但不在profiles表中的profileid值

profiles表有8107个不同的"profileid"值,而profilesrelevation表有8380个不同的"profilesid"值......

profiles.profileid
profilesrelevation.profileid

select * from profiles, profilesrelevation 
where profilesrelevation.profileid != profiles.profileid  
Run Code Online (Sandbox Code Playgroud)

不起作用,怎么样?

OMG*_*ies 10

使用LEFT JOIN/IS NULL

   SELECT pr.*
     FROM PROFILESREVELATION pr
LEFT JOIN PROFILES ON p.profileid = pr.profileid
    WHERE p.profileid IS NULL
Run Code Online (Sandbox Code Playgroud)

使用NOT EXISTS

SELECT pr.*
  FROM PROFILESREVELATION pr
 WHERE NOT EXISTS(SELECT NULL
                    FROM PROFILES p
                   WHERE p.profileid = pr.profileid)
Run Code Online (Sandbox Code Playgroud)

使用NOT IN

SELECT pr.*
  FROM PROFILESREVELATION pr
 WHERE pr.profileid NOT IN (SELECT p.profileid
                              FROM PROFILES p)
Run Code Online (Sandbox Code Playgroud)

结论

LEFT JOIN IS NULL是最有效的MySQL时相比,列不可为空.如果比较的列可以为空,则NOT IN和NOT EXISTS更有效.