- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Nzを使用したサブクエリのLeftJOINのnul)
Nz関数でNULLが*になる理由と回避方法
このQ&Aのポイント
- Access 2016でNz関数を使用してLeftJoinのサブクエリでnullが「*」になる現象が発生します。
- Nz関数は、nullの代わりに指定した値を返す関数であり、今回の現象はNz関数の動作によるものです。
- この現象を回避するためには、サブクエリの結果を一時テーブルに格納し、その後にLeftJoinを実行する方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
回避方法です。 SELECT [テーブル1].ID, a, b, Q.除外a, Q.除外b FROM テーブル1 INNER JOIN (SELECT ID, Nz([テーブル2].除外a,"*") AS 除外a, Nz([テーブル2].除外b,"*") AS 除外b FROM テーブル2) AS Q ON [テーブル1].ID = Q.ID; Union SELECT [テーブル1].ID,a,b, [テーブル2].除外a, [テーブル2].除外b FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].ID = [テーブル2].ID WHERE [テーブル2].ID Is Null;
その他の回答 (1)
- chayamati
- ベストアンサー率41% (260/624)
回答No.1
今晩は Qが突然出てきて理解できませんが、次で狙い通りになります SELECT ID,A, B, 除外A,除外B FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].ID = [テーブル2].ID;
質問者
補足
説明が足りてなくてすみません。 そのSQLを実行すると下記の結果になります ID A B 除外A 除外B 1 a1 b1 a1 (null) 2 a2 b2 (null) b1 3 a3 b3 (null) (null) 実際に欲しいのはこちらです。 ID a b 除外a 除外b 1 a1 b1 a1 * 2 a2 b2 * b1 3 a3 b3 (null) (null) 「Q」というのはサブクエリのエイリアス(別名)です。
お礼
なるほど!Unionを使えばいいんですね。 この発想を思いつきませんでした・・・ 非常に助かりました。 ありがとうございます。