2016-07-19 13 views
0

Table1では利用可能で、Table2では利用できないレコードを見つける必要がありました。そのために、2つのクエリを書きました。左結合が結合されていない列に対して予期せぬ結果をもたらしています

select t1.a, t2.b, a.t1.c, t2.d, t2.e 
from Table1 t1 
left join Table2 t2 
on t1.a = t2.d (and/where) t2.d is null; 

select t1.a, t2.b, a.t1.c, t2.d, t2.e 
from (select * from Table1) as t1 
left join (select * from Table2) as t2 
on t1.a = t2.d where t2.d is null; 

t2.dフィールドが期待どおりNULLになっています。ただし、t2.eは、最初のケースではnull値ではなく、2番目のクエリではnull結果(これも期待されます)を与えています。

2つのクエリの動作の違いについて教えてください。

追加情報:データフィールドには空白も空白もありません。 MySQLの5.6

+0

であなたに表1で使用可能なすべてのレコードを表示しません。クエリの –

+0

'(と/ where)'は有効な構文ではありません。実際の最初のクエリは何ですか? – Barmar

+0

問題を示すサンプル・データをsqlfiddleで作成できますか? – Barmar

答えて

0

を使用すると、この文字列で検索してください:

SELECT 
    * 
FROM 
    Table1 
WHERE 
    t1.a NOT IN 
    (
     SELECT 
      t2.d 
     FROM 
      Table2) 


これが何を記述すると、バージョンのいずれかのために、可能性は思えない表2

+0

私は実際に言及した2つのクエリの結果の違いを理解しようとしていました。私は解決策を探していません。なぜ私はtable2の非結合フィールドがなぜクエリの1つでnullを与えていないのか理解したいと思っていました。 –

関連する問題