プロが教える店舗&オフィスのセキュリティ対策術

SQLで2つの表から条件に合ったデータを取り出し、同じ列に表示させたいのですが、
どうやっても外部結合のようにすることしかできませんでした。
取り出したデータを縦に結合?させることはできるのでしょうか?

例) dataは月の上旬中旬下旬でそれぞれabcとします。
入力値はmonthとdayで、これらからuriageを選択します。
dataの取りうる値はa,b,c,ab,bc,abcとします。
  
table:A 売上表            table:B 上旬中旬下旬判断
---------------------------   -----------
 key | data | month | uriage   day | data
---------------------------    -----------
  1 |  a  |  1  |  500      1 |  a
  2 |  ab  |  1  |  800     … |  …
  3 |  bc  |  1  |  400     10 |  a
  4 |  c  |  1  |  100     11 |  b
  5 |  abc |  1  |  900     … |  …
  … |  …  |  …  | …     31 |  c
---------------------------    -----------

month = 1 , day =5のとき
 table:Bより
  SELECT data FROM table:B WHERE day = 5
としてdata "a" を得ます。
この"a"と同じdataを持つuriageを表示させたいので
  SELECT uriage FROM table:A
  WHERE month = 1 AND data = (SELECT data FROM table:B WHERE day = 5)
として
 table:query1
 --------
   uriage
 --------
   500
 --------
を得ました。

ここまでは良いのですが、これに付け加えて、
table:Bから取り出したdata "a"をtable:Aのdataが含むとき(data = a,ab,abcのとき)
その全てのuriageを表示させたく、
ワイルドカードを使おうと
  SELECT uriage FROM table:A
  WHERE month = 1 AND data = %(SELECT data FROM table:B WHERE day = 5)%
等としてみたのですが、上手くいきませんでした。
そこで、別のクエリーを作って
  SELECT uriage FROM table:A
  WHERE month = 1 AND data = 'ab' AND data = 'abc'
として
 table:query2
 ---------
  uriage
 ---------
   800
 ---------
   900
 ----------
を得ました。

そして、最後に、
得られた2つの表をまとめて
 ---------
  uriage
 ---------
   500
 ---------
   800
 ---------
   900
 ---------
としたいのですが、
  SELECT uriage, uriage FROM query1, query2
とすると
 ------------------
  uriage | uriage
 ------------------
   500  |  800
   500  |  900
 ------------------
となりますし、UNIONは使い方がよくわからないためシンタックスエラーにしかならず...。
そもそも、縦に結合?はできるのでしょうか???
あれこれ試してみたのですが、詰まってしまったので、
どなたか知恵をお貸しください。

A 回答 (1件)

こういうことでしょうか。



select A.uriage
from A
inner join B
on (A.data like '%' || b.data || '%')
where A.month = 1
and b.day = 5;
    • good
    • 0
この回答へのお礼

求めていた結果が得られました!
inner joinとワイルドカードの使い方、勉強になりました。
早速のご回答ありがとうございました。

お礼日時:2012/10/25 16:55

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