• 締切済み

NULL行の取得について

教えてください。 Aはトランザクションテーブルです。 A 列1 列2 1 1 2 NULL 3 2 Bは種別テーブルです。 B 列1 列2 列3 aaa 1 あああ1 aaa 2 あああ2 aaa 3 あああ3 select A.列1 B.列3 from INNER JOIN B ON ( (A.列2 = B.列2 or A.列2 is null) and B.列1 = 'aaa') 上記のSQLを実行すると、 A.列1が2のような、列2がNULLだと、 1 あああ1 2 あああ1 2 あああ2 2 あああ3 3 あああ2 となってしまいます。 望む形としては、 1 あああ1 2 null 3 あああ2 としたいのですが。。。 何が悪いか、教えていただけませんでしょうか。 お願いします。

みんなの回答

  • sky-star
  • ベストアンサー率0% (0/6)
回答No.4

select A.列1 ,B.列3 from A left join B on a.列2=b.列2 where b.列1='aaa'

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

元のテーブルから見ると、ほしいのは 1 あああ1 2 null 3 あああ3 でしょうか? 結合の条件で、or A.列2 is null となっていますね。 結合を考える時には、次のように考えてください。 まず、クロス結合を考える。 これは、各テーブルの行の全ての組み合わせです。 3×3で9行になります。 この中で、結合の条件を満たす行だけが選択される。 この例ですと、Aの2行目とBの3行の組み合わせは、A.列2がnullですので、 3行とも選択されます。 表示の方を変えるのでしたら、 SELECT A.列1, case when A.列2 is null then null else B.列3 end from A INNER JOIN on A.列2 = B.列2 and B.列1 = 'aaa'; でどうでしょう?

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

外部結合を使う場合 select A.列1,B.列3 from a left join b on a.列2=b.列2 and b.列1='aaa'

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

スカラーサブクエリを使って select A.列1, ( select B.列3 from b where a.列2 = b.列2 and b.列1 = 'aaa' ) from a