17

なんらかの理由でわからない問題が発生しています。2つのテーブルを結合するクエリを作成しようとしていますが、テーブルに一致するものが見つからない可能性があります。そのような:

SELECT 
    Table1.IDField, Table2.IDField
FROM 
    Table1
LEFT OUTER JOIN 
    Table2 ON Table1.PersonID = Table2.PersonID
WHERE 
    (Table1.IDField = '12345')
    AND (Table2.Category = 'Foo')

に一致するものがない場合Table2、何も返されません。ただし、一致するものがない場合はその列にNULLを返し、それでも。から値を返す必要がありますTable1

私は考えられるすべてのもので変更しましたJOINが、役に立ちませんでした。

Table2.Category他の複数の値を含めることができるため、OR IS NULLある種の取引を行うことはできません。

したがって、に一致するものがない場合Table2.Category = 'Foo'でも、返す必要があります。

Table1 | Table2
----------------
 12345 |  NULL

助言がありますか?

4

3 に答える 3

29

の条件を句table2から外して、に移動します。WHEREJOIN

SELECT 
    Table1.IDField, Table2.IDField
FROM 
    Table1
LEFT OUTER JOIN Table2 
    ON Table1.PersonID = Table2.PersonID
    AND Table2.Category = 'Foo'
WHERE 
    Table1.IDField = '12345'
于 2013-01-04T16:33:13.300 に答える
7

これを試して:

LEFT OUTER JOIN
Table2 ON Table1.PesonID = Table2.PersonID
AND Table2.Category = 'Foo'

次に、WHERE句から「Foo」行を削除します

于 2013-01-04T16:32:26.140 に答える
0

問題は、結合自体ではなく、table2に一致するwhere句の要件にあります。私はこれをwherecoalese(table2.category、'Foo')='Foo'で解決しました。そうすれば、table2がnullの場合でも、一致します。

于 2013-01-04T16:34:43.327 に答える