「テーブル:A」の「カラム:no」に1~20のランダム値が入っています。
「テーブル:B」の「カラム:no」に1~10の値が入っており、
かつ、「カラム:yyyymmdd」という日付が「20070320」という形式で、各番号に紐付き入っています。
「テーブル:C」の「カラム:no」に11~20の値が入っています。
かつ、「カラム:yyyymmdd」という日付が「20070320」という形式で、各番号に紐付き入っています。
ここで、「テーブル:A」の「カラム:no」の日付を求めようと思いますが、
下記のSQLでは、エラーとなってしまいます。
SELECT t1.no ,t2.yyyymmdd FROM A as t1
LEFT OUTER
(
SELECT t3.no,t3.yyyymmdd FROM B t3
UNION ALL
SELECT t4.no,t4.yyyymmdd FROM C t4
) as t2
ON t1.uid = t2.uid
ORDER BY t2.yyyymmdd
MYSQLのバージョンが悪いのか、私のSQLが悪いのかわかりませんが、
ご教授、よろしくお願い致します。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | b-wind | 3344回 | 3206回 | 440回 | 2007-03-20 09:50:57 |
2 | kurukuru-neko | 1844回 | 1736回 | 155回 | 2007-03-20 17:28:11 |
3 | chuken_kenkou | 722回 | 671回 | 54回 | 2007-03-20 19:26:29 |
コメント(1件)
indexがうまく使われませんが以下でも
動くことは動きます。
例1:
select
distinct distinct a.no,
if( a.no <=10,b.yyyymmdd,c.yyyymmdd) as yyyymmdd
from a,b,c
where a.no = b.no or a.no = c.no
order by yyyymmdd asc;
例2:
select
distinct a.no,
if( a.no <=10,b.yyyymmdd,c.yyyymmdd) as yyyymmdd
from a,b,c
where a.no in( b.no, c.no )
order by yyyymmdd asc;
例3:
select
t1.no
,yyyymmdd from a as t1
left join (
select no,yyyymmdd from b
union all
select no,yyyymmdd from c
) as t2 on t1.no = t2.no
order by yyyymmdd asc;
例4:
select no,yyyymmdd from a cross join b using(no)
union
select no,yyyymmdd from a cross join c using(no)
order by yyyymmdd asc;