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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/05/10 22:14:45
  • 終了:2009/05/17 22:15:02

回答(2件)

id:degucho No.1

degucho回答回数253ベストアンサー獲得回数672009/05/10 22:55:29

ポイント35pt

使用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

id:frkw2004 No.2

ふるるP回答回数192ベストアンサー獲得回数212009/05/11 17:43:50

ポイント35pt

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません