2

私はこのようなことをしたい:

SELECT
    Users.id,
    Countries.name 
FROM
    Users, Countries
WHERE 
    Users.country_id = Countries.id

問題は、それ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)

ただし、これは、存在する**ごとにCountries.id1回行を返します。これを回避するにはどうすればよいですか?

4

3 に答える 3

6
SELECT  users.id, countries.name
FROM    users
LEFT JOIN
        countries
ON      countries.id = users.country_id

これは、(キーワードANSIを使用した)結合構文が推奨される理由の良い例です。JOIN

于 2012-04-24T10:18:03.673 に答える
2
SELECT          Users.id,
                Countries.name
FROM            Users
LEFT OUTER JOIN Countries ON Users.country_id = Countries.id
于 2012-04-24T10:18:33.003 に答える
0
SELECT
    Users.id,
    Countries.name 
FROM
    Users, Countries
WHERE 
    Users.country_id = Countries.id
UNION
SELECT
    id,
    '{{no country}}' AS name 
FROM
    Users
WHERE 
   NOT EXISTS ( SELECT * 
                  FROM Countries
                 WHERE Users.country_id = Countries.id );
于 2012-04-24T12:42:02.933 に答える