2012-04-24 18 views
2

を含むことができ、カラムに登録しよう:は、私がこのような何かをしたいNULL

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

問題がUsers.country_idは時々NULLできることであり、それは行全体である場合に返されません。私はそれが行を返すが、その列に 'null'または ''を入れて欲しい。存在する各 * Countries.id * に対して一度行を返すことが

SELECT 
    Users.id, 
    Countries.name 
FROM 
    Users, Countries 
WHERE 
    (Users.country_id = Countries.id OR Users.country_id IS NULL) 

:私はこれを試みました。これを回避するにはどうしたらいいですか?

+1

あなたは、外部結合を使用することができます。 – Murtaza

答えて

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

これはANSIが好ましい(JOINキーワードを使用して)結合構文を理由の良い例です。

+0

くそー!それに私を打つ。 :p – weenoid

+0

ありがとうございます。これは機能します。私は「LEFT OUTER JOIN」も試してみましたが、それもうまくいきます。 – alnafie

+3

@alnafie: 'OUTER'は純粋な構文的砂糖です。 – Quassnoi

2
SELECT   Users.id, 
       Countries.name 
FROM   Users 
LEFT OUTER JOIN Countries ON Users.country_id = Countries.id 
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); 
+0

「UNION」は重複排除のための無駄な作業を行います。 UNION ALLを使用する必要があります。ただし、クエリ全体が不必要で、OUTER JOINSが存在し、mysqlがサポートしています。 –

+0

@FlorinGhita: "クエリ全体が不必要です[sic]" - あなたはOUTER JOINを使用する必要があることを暗示しているようです。 「OUTER JOIN」は、一種のユニオンであり、ヌルを生成するように明示的に設計されており、ヌルを避けることを好みます。 – onedaywhen

関連する問題