SQL 表の結合
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は使い方がよくわからないためシンタックスエラーにしかならず...。
そもそも、縦に結合?はできるのでしょうか???
あれこれ試してみたのですが、詰まってしまったので、
どなたか知恵をお貸しください。
補足
回答ありがとうございます。 結合はインデックス付けています。 年月はそのほうが軽くなるのでしょうか?やってみましたが、相変わらず重たいです。 それぞれのテーブルが1万件以上あるので、それが原因なのでしょうか?