1

次のように2つのテーブルがあります。

Table1

id           date            pprice
 1           22-1-2013       54.56
 2           15-2-2013       55.64 
 3           25-3-2013       57.62

Table2

id           date            dprice
1            12-1-2013       66.56
2            17-2-2013       68.59
3            25-3-2013       70.25

今、私は次のクエリを使用しています

SELECT * FROM (
(SELECT Table1.date, Table1.pprice AS P_Price, NULL AS D_Price FROM Table1)
UNION ALL
(SELECT Table2.date, NULL AS P_Price, Table2.dprice AS D_Price FROM Table2)
) results
ORDER BY date DESC

これにより、次の出力が得られます。

date           P_Price          D_Price
25-3-2013      NULL             70.25
25-3-2013      57.62            NULL
17-2-2013      NULL             68.59
15-2-2013      55.64            NULL
22-1-2013      54.56            NULL
12-1-2013      NULL             66.56

この場合、2013 年 3 月 25 日の日付が 2 回表示され、P_Price が 1 回、D_Price が 1 回表示されます。入力された価格と NULL がないように、日付行を一度だけ表示しようとしています

  date           P_Price          D_Price
**25-3-2013      57.62            70.25**
  17-2-2013      NULL             68.59
  15-2-2013      55.64            NULL
  22-1-2013      54.56            NULL
  12-1-2013      NULL             66.56

どうすればこれを入手できますか?

4

2 に答える 2

3

残念ながら、MySQL は をサポートしていませんFULL OUTER JOINが、次のようにして同じ結果を得ることができます。

select t1.date, t1.pprice AS P_Price, t2.dprice AS D_Price 
from Table1 t1
    left join table2 t2 on t1.date = t2.date
union  
select t2.date, t1.pprice AS P_Price, t2.dprice AS D_Price 
from Table2 t2
    left join table1 t1 on t2.date = t1.date
于 2013-07-06T21:02:49.650 に答える
1

SUM と GROUP BY を使用します。

SELECT date, SUM(P_Price) AS P_Price, SUM(D_Price) AS D_Price 
FROM (SELECT Table1.date, Table1.pprice AS P_Price, NULL AS D_Price FROM Table1
      UNION ALL
      SELECT Table2.date, NULL AS P_Price, Table2.dprice AS D_Price FROM Table2
     ) results
GROUP BY date
ORDER BY date DESC
于 2013-07-06T21:02:35.867 に答える