在可能包含NULL的列上加入

aln*_*fie 2 mysql sql

我想做这样的事情:

SELECT
    Users.id,
    Countries.name 
FROM
    Users, Countries
WHERE 
    Users.country_id = Countries.id
Run Code Online (Sandbox Code Playgroud)

问题是Users.country_id有时可以NULL,如果是整个行都没有返回.我希望它返回行但在该列中使用'null'或''.我试过这个:

SELECT
    Users.id,
    Countries.name 
FROM
    Users, Countries
WHERE 
    (Users.country_id = Countries.id OR Users.country_id IS NULL)
Run Code Online (Sandbox Code Playgroud)

但是,对于存在的每个*Countries.id*,它返回一次行.我该如何解决这个问题?

Qua*_*noi 6

SELECT  users.id, countries.name
FROM    users
LEFT JOIN
        countries
ON      countries.id = users.country_id
Run Code Online (Sandbox Code Playgroud)

这是为什么首选ANSI连接语法(使用JOIN关键字)的一个很好的例子.

  • @alnafie:`OUTER`是纯粹的语法糖. (3认同)