重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

テーブルがA・Bの2つあり、どちらも「ID」と「名前」が入っています。IDをキーとして
まずテーブルAで検索して見つからなかった場合ばテーブルBから検索するような
Select文は、どのような記述になるのでしょうか?また、ビューとして定義する場合には
どのような方法になるのでしょうか?よろしくお願い致します。

A 回答 (4件)

SQL だけで全てこなすことが正しいとは限らないのですが・・・・・・。



速度など全く気にしないのであれば

select top 1 id, name from (
  select id, name, 50 as tID from TA where id=XXXX
  union
  select id, name, 100 as tID from TB where id=XXXX
 ) tmpTbl
 order by tID

こんな感じで行けるかとは思います。要は両方から検索して結合、その際に Table A には tID=50、Table B には tID=100 を当てておき、tID でソートして先頭1行を取得する、というものです。一応ですが、SQL Server/ MS Access 限定の SQL です。

実際のところ、同一 ID のデータは絶対に A か B のどちらかにしか無いということであれば、2つの検索結果を結合しても1行以下しか返ってこないことになるので、from 句の中のサブクエリだけでいいことになります。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。「どうしてもSQL」という訳ではないのですが、
後々の保守性や諸事情ございまして、SQLで書きたかったのです。

で、「tID=50」や「tID=100」の50とか100という値ですけど、この値の理由は
何でしょうか?各テーブルのデータ数が50個以下ならば、この値でOK、ということ
でしょうか?

お礼日時:2011/09/16 20:36

ANo3です。


書き忘れ。

ただし、TableAに「名前」がNullの「ID」があり、このIDをキーとした場合は
TableBの「名前」ではなく、TableAの「名前」すなわち、
Nullを出力したいという仕様でないことが条件です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
残念ながら、IDにNullは使わないので、この方法では無理なようです。

お礼日時:2011/09/17 08:41

SELECT ISNULL((SELECT name FROM TableA WHERE id = 3),


(SELECT name FROM TableB WHERE id = 3))
ででます。
    • good
    • 0

#1 です。

お礼を読みました。

50・100 の値は単にソートキーで、もし両方から検索された場合に、テーブル A のデータを先に持ってくるためのだけの対策です。なので、テーブル A の方の値がテーブル B の値より小さければ何でもいいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2011/09/17 08:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す