我正在處理以下挑戰:
我有多個(稀疏)表,它們都共享一個共同的日期欄位 共同的“product_id”。此外,每個表都有一個額外的欄位,用于跟蹤產品的特定型別的交易資料,例如“已售出的單位”、“已購買的單位”、“received_support_requests”等。
表格1
| 日期 | 產品編號 | 售出單位 |
|---|---|---|
| 2022-01-01 | 1 | 10 |
| 2022-01-02 | 2 | 40 |
表 2
| 日期 | 產品編號 | 購買的單位 |
|---|---|---|
| 2022-01-01 | 2 | 456 |
| 2022-01-04 | 5 | 34 |
表3
| 日期 | 產品編號 | 收到的支持請求 |
|---|---|---|
| 2022-01-04 | 5 | 2 |
| 2022-01-05 | 2 | 1 |
我的目標是以某種方式連接所有這些表,以便獲得一個主表,該表顯示每個產品在特定日期發生的情況,如下所示,使用 MySQL:
| 日期 | 產品編號 | 售出單位 | 購買的單位 | 收到的支持請求 |
|---|---|---|---|---|
| 2022-01-01 | 1 | 10 | 0 | 0 |
| 2022-01-01 | 2 | 0 | 456 | 0 |
| 2022-01-02 | 2 | 40 | 0 | 0 |
| 2022-01-04 | 5 | 0 | 34 | 2 |
| 2022-01-05 | 2 | 0 | 0 | 1 |
這些表格都非常長 > 50000 并且包含大量產品 > 3000
I first though about building a kind of ("date" - "product id") scaffold and then just left join all of the tables to this scaffold table. Unfortunately the combination of each date, with each product gets too big.
How would you accomplish such a join in a more efficient way?
uj5u.com熱心網友回復:
SELECT date,
product_id,
COALESCE(table1.amount, 0) sold,
COALESCE(table2.amount, 0) purchased,
COALESCE(table3.amount, 0) supported
FROM ( SELECT date FROM table1
UNION
SELECT date FROM table2
UNION
SELECT date FROM table3 ) dates
CROSS
JOIN ( SELECT product_id FROM table1
UNION
SELECT product_id FROM table2
UNION
SELECT product_id FROM table3 ) products
NATURAL LEFT JOIN table1
NATURAL LEFT JOIN table2
NATURAL LEFT JOIN table3
HAVING sold purchased supported;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/451344.html
標籤:mysql sql join transactions
