PPP,
B.a as ba
from
A,
(
select a
from b
where
x = …
)B
where PPP IN('1','2','3','4')
上記の条件で副問い合わせに当てはまる
データが1件も存在しなかった場合も
下記のように表示したいのですが、
1 ba
2 ba
3 ba
4 ba
よいやり方はありますでしょうか
使用DBMSとデータが存在しないときのbaがなんなのかよくわかりませんが
Oracleだとこんな感じでしょうか
SELECT C.PPP ,B.A as BA FROM A ,(select a from b where x = … ) B ,(SELECT '1' as PPP from DUAL UNION SELECT '2' as PPP from DUAL UNION SELECT '3' as PPP from DUAL UNION SELECT '4' as PPP from DUAL ) C WHERE C.PPP = A.PPP(+) ORDER BY 1
ほかのDBMSでも1,2,3,4のレコードを持つ仮テーブルを作成して
それに項目が必要なテーブルを外部結合します。
AとBは直積?
Aの項目は使わない?(この場合from Aが不要?)
こういう場合はコメント欄をあけておいてもらった方が
解答が付きやすいかもしれません。
select
PPP,
B.a as ba
from
A,
(
select a
from b
where
x = …
union
select 'BA' where (Select count(*) from b where x = …)=0
)B
where PPP IN('1','2','3','4')
SQL Serverで考えました。 直積を使っているので、テーブルBにレコードがない場合、強制的に1レコード作るようにします。
通常、複数のテーブルを結合するとき、直積を使うことはありません。テーブル間には結合するための条件があるからです。そしてAテーブルのあるレコードに対応するレコードがBテーブルにない場合にも抽出したい、と言うような場合、外部結合(Left Join など)を使います。
http://orakumiko.hp.infoseek.co.jp/yougo/q_chokseki.html
コメント(0件)