編集:私の悪い、私はIDの部分を逃したと思います。
これが当てはまる場合、私の初期の解決策ははるかに良い答えにはなりませんか?
SELECT 't1' AS in_table, t1.id AS id, t1.datetime, t1.amt
FROM tb1 t1 WHERE t1.id = 2341 AND t1.datetime BETWEEN '2017-09-06' AND '2017-09-09'
UNION ALL
SELECT 't2' AS in_table, t2.id AS id, t2.datetime, t2.amt
FROM tb2 t2 WHERE t2.id = 2341 AND t2.datetime BETWEEN '2017-09-06' AND '2017-09-09'
UNION ALL
SELECT 't3' AS in_table, t3.id AS id, t3.datetime, t3.amt
FROM tb3 t3 WHERE t3.id = 2341 AND t3.datetime BETWEEN '2017-09-06' AND '2017-09-09'
UNION ALL
SELECT 't4' AS in_table, t4.id AS id, t4.datetime, t4.amt
FROM tb4 t4 WHERE t4.id = 2341 AND t4.datetime BETWEEN '2017-09-06' AND '2017-09-09'
UNION ALL
SELECT 't5' AS in_table, t5.id AS id, t5.datetime, t5.amt
FROM tb5 t5 WHERE t5.id = 2341 AND t5.datetime BETWEEN '2017-09-06' AND '2017-09-09'
-----------------------旧----------------以下は編集-------
EDIT:JUST警告され、これはONE UGLY MESSは、非常にUGLY HACKすべての
まず、サンプルの結果を使用することです:基本的にhttp://rextester.com/NFP12823
、私はFULL OUTER JOINの力を利用し、このようなものを作りました。
SELECT COALESCE(t1.datetime, tbl.datetime_index) AS datetime_index, t1.id as t1_id, t1.datetime as t1_datetime, t1.amt as t1_amt, tbl.t2_id as t2_id, tbl.t2_datetime as t2_datetime, tbl.t2_amt as t2_amt, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM tb1 t1
FULL OUTER JOIN (
SELECT COALESCE(t2.datetime, tbl.datetime_index) AS datetime_index, t2.id as t2_id, t2.datetime as t2_datetime, t2.amt as t2_amt, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM tb2 t2
FULL OUTER JOIN (
SELECT COALESCE(t3.datetime, tbl.datetime_index) AS datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM tb3 t3
FULL OUTER JOIN (
SELECT COALESCE(t4.datetime, t5.datetime) AS datetime_index, t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4
FULL OUTER JOIN tb5 t5
ON t4.datetime = t5.datetime
) tbl
ON t3.datetime = tbl.datetime_index
) tbl
ON t2.datetime = tbl.datetime_index
)tbl
ON t1.datetime = tbl.datetime_index
だから、中心から始まる、私はT4とT5に入社し、あなたの主な目標は、時間にベースを検索することがあるため、私は、共通のインデックスdatetime_indexを作成しました。 joinでは、一致する日付またはnull(一致しない場合)が返されるため、coalesceを使用すると最初のnull以外の値が返されるため、t4の日付またはt5の日付になります。このプロセスを3回以上繰り返すことで、以前に生成されたテーブルの上にそれぞれ、あなたが望むもののような完全な最終テーブルが得られます。
注: FULL OUTER JOINはMySQLではサポートされていません。これを解決するには別のハックを探したり、別のSQLサーバー(PostgreSQLを使用しました)を使用する必要があります。
EDIT2:ここではMySQLの等価バージョンがだ - http://rextester.com/FKMS97691
SELECT COALESCE(tbl.t1_datetime, tbl.datetime_index) AS datetime_index, tbl.t1_id as t1_id, tbl.t1_datetime as t1_datetime, tbl.t1_amt as t1_amt,tbl.t2_id as t2_id, tbl.t2_datetime as t2_datetime, tbl.t2_amt as t2_amt, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t1.id as t1_id, t1.datetime as t1_datetime, t1.amt as t1_amt,tmptbl.t2_id as t2_id, tmptbl.t2_datetime as t2_datetime, tmptbl.t2_amt as t2_amt, tmptbl.t3_id as t3_id, tmptbl.t3_datetime as t3_datetime, tmptbl.t3_amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb1 t1 LEFT JOIN (
SELECT COALESCE(tbl.t2_datetime, tbl.datetime_index) AS datetime_index, tbl.t2_id as t2_id, tbl.t2_datetime as t2_datetime, tbl.t2_amt as t2_amt, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t2.id as t2_id, t2.datetime as t2_datetime, t2.amt as t2_amt,tmptbl.t3_id as t3_id, tmptbl.t3_datetime as t3_datetime, tmptbl.t3_amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb2 t2 LEFT JOIN (
SELECT COALESCE(tbl.t3_datetime, tbl.datetime_index) AS datetime_index, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 LEFT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 RIGHT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index) tbl
) tmptbl ON t2.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t2.id as t2_id, t2.datetime as t2_datetime, t2.amt as t2_amt, tmptbl.t3_id as t3_id, tmptbl.t3_datetime as t3_datetime, tmptbl.t3_amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb2 t2 RIGHT JOIN (
SELECT COALESCE(tbl.t3_datetime, tbl.datetime_index) AS datetime_index, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 LEFT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 RIGHT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index) tbl
) tmptbl ON t2.datetime = tmptbl.datetime_index) tbl
) tmptbl ON t1.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t1.id as t1_id, t1.datetime as t1_datetime, t1.amt as t1_amt, tmptbl.t2_id as t2_id, tmptbl.t2_datetime as t2_datetime, tmptbl.t2_amt as t2_amt, tmptbl.t3_id as t3_id, tmptbl.t3_datetime as t3_datetime, tmptbl.t3_amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb1 t1 RIGHT JOIN (
SELECT COALESCE(tbl.t2_datetime, tbl.datetime_index) AS datetime_index, tbl.t2_id as t2_id, tbl.t2_datetime as t2_datetime, tbl.t2_amt as t2_amt, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t2.id as t2_id, t2.datetime as t2_datetime, t2.amt as t2_amt,tmptbl.t3_id as t3_id, tmptbl.t3_datetime as t3_datetime, tmptbl.t3_amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb2 t2 LEFT JOIN (
SELECT COALESCE(tbl.t3_datetime, tbl.datetime_index) AS datetime_index, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 LEFT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 RIGHT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index) tbl
) tmptbl ON t2.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t2.id as t2_id, t2.datetime as t2_datetime, t2.amt as t2_amt, tmptbl.t3_id as t3_id, tmptbl.t3_datetime as t3_datetime, tmptbl.t3_amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb2 t2 RIGHT JOIN (
SELECT COALESCE(tbl.t3_datetime, tbl.datetime_index) AS datetime_index, tbl.t3_id as t3_id, tbl.t3_datetime as t3_datetime, tbl.t3_amt as t3_amt, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 LEFT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index
UNION
SELECT tmptbl.datetime_index, t3.id as t3_id, t3.datetime as t3_datetime, t3.amt as t3_amt, tmptbl.t4_id as t4_id, tmptbl.t4_datetime as t4_datetime, tmptbl.t4_amt as t4_amt, tmptbl.t5_id as t5_id, tmptbl.t5_datetime as t5_datetime, tmptbl.t5_amt as t5_amt
FROM tb3 t3 RIGHT JOIN (
SELECT COALESCE(tbl.t4_datetime, tbl.t5_datetime) AS datetime_index, tbl.t4_id as t4_id, tbl.t4_datetime as t4_datetime, tbl.t4_amt as t4_amt, tbl.t5_id as t5_id, tbl.t5_datetime as t5_datetime, tbl.t5_amt as t5_amt
FROM (SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 LEFT JOIN tb5 t5 ON t4.datetime = t5.datetime
UNION
SELECT t4.id as t4_id, t4.datetime as t4_datetime, t4.amt as t4_amt, t5.id as t5_id, t5.datetime as t5_datetime, t5.amt as t5_amt
FROM tb4 t4 RIGHT JOIN tb5 t5 ON t4.datetime = t5.datetime) tbl
) tmptbl ON t3.datetime = tmptbl.datetime_index) tbl
) tmptbl ON t2.datetime = tmptbl.datetime_index) tbl
) tmptbl ON t1.datetime = tmptbl.datetime_index) tbl
私は笑、これは1つの醜い混乱であると述べたのはこのためです。
説明が不明です。 [mcve]を読んで行動してください。 DDLなどを表示してください。物事を明確に参照し、あなたが意味することを言うのに十分な文章と言葉を使用してください。 – philipxy