• ベストアンサー

2つのテーブルから検索したい

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

質問者が選んだベストアンサー

  • ベストアンサー
  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.1

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 句の中のサブクエリだけでいいことになります。

AGRESS
質問者

お礼

早速の回答ありがとうございます。「どうしてもSQL」という訳ではないのですが、 後々の保守性や諸事情ございまして、SQLで書きたかったのです。 で、「tID=50」や「tID=100」の50とか100という値ですけど、この値の理由は 何でしょうか?各テーブルのデータ数が50個以下ならば、この値でOK、ということ でしょうか?

その他の回答 (3)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

ANo3です。 書き忘れ。 ただし、TableAに「名前」がNullの「ID」があり、このIDをキーとした場合は TableBの「名前」ではなく、TableAの「名前」すなわち、 Nullを出力したいという仕様でないことが条件です。

AGRESS
質問者

お礼

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

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

SELECT ISNULL((SELECT name FROM TableA WHERE id = 3), (SELECT name FROM TableB WHERE id = 3)) ででます。

  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.2

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

AGRESS
質問者

お礼

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

関連するQ&A

専門家に質問してみよう