2017-12-15 12 views
-3

私は5つのテーブルtable1、table2、table3、table4、table5を持っています。 5つはすべて異なるテーブルです。すべてのテーブルには自動増分IDがあります。 'thor_id'、 'iron_id'、 'wonder_id'、 'hulk_id'、 'spider_id'(自動インクリメントIDではない)のような異なる名前を持つすべてのテーブルに1つの列があります。 4つのテーブルすべてに日付(日付のみ)の列があります。 1つのテーブルにdatetime(2017-09-06 09:09:09 - 重複しない)があり、重複した* id(これも必要です)があります。Mysql:日付を基準にして1つの列のみを一致させる5つの異なるテーブルから選択する

* idと特定の日付または2つの日付の間に基づいて5つのテーブルすべてからデータを取得したいとします。だから、結果セットは、1つの日付について のように試してみました

|date  | t1.id | t1.date | t1.amt | t2.id |t2.date |t2.amt |t3.id | t3.date | t3.amt | t4.id | t4.date | t4.amt |t5.id | t5.date |t5.amt | 
|-----------|-------|-----------|--------|-------|-----------|-------|------|----------|--------|-------|----------|--------|------|----------|-------| 
|2017-09-06 | 2341 |2017-09-06 | 10000 | null | null  |null |2341 |2017-09-06| 100000 | null | null | null | 2341 |2017-09-06|200000 | 
|2017-09-07 | 2341 |2017-09-07 | 90000 | null | null  |null |2341 |2017-09-07| 300000 | 2341 |2017-09-07| 1000 | 2341 |2017-09-07|500000 | 
|2017-09-09 | null |null  | null | 2341 | 2017-09-09|200000 |2341 |2017-09-07| 300000 | null | null | null | 2341 |2017-09-07|500000 | 

1.Iは日付

select t1_date,t1_id,t1_amt,t2_date,t2_id,t_amt from t1 inner join t2 where date(t2_date)='2017-09-06' and t2_id='9106' and t1_date='2017-09-06' and t1_id='9106'; 

2.Iするために2つのテーブルを試してみました

|date  | t1.id | t1.date | t1.amt | t2.id |t2.date |t2.amt |t3.id | t3.date | t3.amt | t4.id | t4.date | t4.amt |t5.id | t5.date |t5.amt | 
|----------|-------|-----------|--------|-------|--------|-------|------|----------|--------|-------|---------|--------|------|----------|-------| 
|2017-09-06| 2341 |2017-09-06 | 10000 | null | null |null |2341 |2017-09-06| 100000 | null | null | null | 2341 |2017-09-06|200000 | 

2の間の日付でなければなりません同じ2つのテーブルを使用して2つの日付間でデータを検索します。

select t1_date,t1_id,t1_load_amt,t2_date,t2_id,t_total from t1 inner join t2 where date(t2_date) between '2017-09-06' and '2017-09-30' and t2_id='9106' and t1_date between '2017-09-06' and '2017-09-30' and t1_id='9106'; 

No.1は予想される出力を示しますが、3つの他のテーブルを追加すると結果セットは空です。 N0.2レコードの重複行がNULLではなく作成されます。 SQLに慣れていなくても、助けていただければ幸いです。 ありがとうございます。

+1

説明が不明です。 [mcve]を読んで行動してください。 DDLなどを表示してください。物事を明確に参照し、あなたが意味することを言うのに十分な文章と言葉を使用してください。 – philipxy

答えて

0

編集:私の悪い、私は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つの醜い混乱であると述べたのはこのためです。

+0

お返事ありがとうございます。しかし、私が尋ねたことを達成することは不可能ですか?誰ですか? – user2358665

+0

実は、私はもう一つの方法があると思う、私は –

+0

それを修正しましょう、私は以下試してみましたが、 「SELECT t1_date、t1_id、t1_amt、t2_date、t2_id、t2_amt、 t3_date、t3_id、t3_amt、t4_date、t4_id、クエリに参加左t4_amt、 t5_date、t5_id、T1 左からt5_amtがt1_id = t2_id ON T2に参加しt2_date =日付(t1_date) LEFTはt1_id = t3_id ON T3に参加しt3_date =日付(t1_date) LEFTはt1_id = t4_id ON T4およびt4_dateをJOIN (t1_date) LEFT JOIN t5 ON t1_id = t5_idと日付(t5_date)=日付(t1_date) '2017-09-06'と '2017-09-30'との間の日付(t1_date) とt1_id = 4490 'ORDER BY t1_id; " – user2358665

関連する問題