3

私は2つのテーブルを持っています:

投票

ID |  YEARMONTH | VOTES
========================
1  | 201101     | 23
1  | 201102     | 12
1  | 201103     | 12
2  | 201101     | 15
3  | 201102     | 1
4  | 201102     | 17

講義

ID |  YEARMONTH | LECTURES
========================
1  | 201101     | 1
2  | 201101     | 2
3  | 201102     | 5

ID が特定の年月 (講義または投票) の各テーブルの行を持つことができないと仮定すると、グラフで表示できるように結果をリストする必要があります。

yearmonth の結果が他のテーブルにない場合は、ゼロを表示する必要があります。

結果は次のようになります。

ID |  YEARMONTH | VOTES | LECTURES
==================================
1  | 201101     | 23    | 1
1  | 201102     | 12    | 0
1  | 201103     | 12    | 0

もちろん、LECTURES が欠落していない場所で VOTES が欠落している場合は、そこに 0 を表示する必要があります。

4

2 に答える 2

1

通常、これには FULL OUTER JOIN を使用しますが、MySQL はそれらをサポートしていません。

ただし、この質問に対する受け入れられた回答が示すように、UNIONでエミュレートできます。

于 2013-04-02T16:31:00.873 に答える
1

1 つのオプションは、可能なすべての ID/YearMonth の組み合わせを使用してサブクエリを作成し、次にLEFT JOIN他のテーブルに対して作成することです。次にCOALESCE、対応するレコードが null の場合に 0 を返すために使用します。

SELECT t.ID, t.YearMonth, COALESCE(V.Votes,0) Votes, COALESCE(L.Lectures,0) Lectures
FROM (
    SELECT DISTINCT ID, YearMonth
    FROM Votes
    UNION 
    SELECT DISTINCT ID, YearMonth
    FROM Lectures 
    ) t
    LEFT JOIN Votes v on t.ID = v.ID AND t.YearMonth = v.YearMonth
    LEFT JOIN Lectures l on t.ID = l.ID AND t.YearMonth = l.YearMonth

SQL フィドルのデモ

于 2013-04-02T16:32:41.030 に答える