人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

select
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

よいやり方はありますでしょうか

●質問者: どらすけ
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:AS BA PPP SELECT データ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● degucho
●35ポイント

使用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が不要?)

こういう場合はコメント欄をあけておいてもらった方が

解答が付きやすいかもしれません。

http://oshiete1.goo.ne.jp/qa2188776.html


2 ● ふるるP
●35ポイント

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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ