表格1
| 一種 | 乙 | C |
|---|---|---|
| 2021-01-01 01:00:00 | 1 | 20 |
| 2021-01-01 01:00:00 | 2 | 22 |
| 2021-01-01 02:00:00 | 1 | 20 |
| 2021-01-01 03:00:00 | 6 | 20 |
| 2021-01-02 00:00:00 | 3 | 22 |
表2
| 一種 | 乙 | C |
|---|---|---|
| 2021-01-01 | 2 | 20 |
| 2021-01-01 | 9 | 22 |
我有給定格式的 2 個非常大的表,其中 A 和 C 作為它們的主鍵。每次運行以下查詢時,我都會隨機獲取兩個聯合行之一,而不是像示例中那樣獲取第一個。為什么它會這樣,我該如何更改查詢,以便我始終獲得聯合結果中的第一行,除非 table1 沒有該日期?(僅使用聯合,不使用連接)
SELECT * FROM (
(
SELECT Date(A) as 'Date', SUM(B) as 'B', C FROM TABLE1
WHERE Date(A) = '2021-01-01'
AND C = 20
GROUP BY A, C
)
UNION
(
SELECT A, SUM(B) as 'B', C FROM TABLE2
WHERE A = '2021-01-01'
AND C = 20
GROUP BY A, C
)
)d
GROUP BY d.Date , d.C;
聯合結果
| 日期 | 乙 | C |
|---|---|---|
| 2021-01-01 | 8 | 20 |
| 2021-01-01 | 2 | 20 |
查詢結果
| 一種 | 乙 | C |
|---|---|---|
| 2021-01-01 | 8 | 20 |
uj5u.com熱心網友回復:
你可以像這樣避免它
SELECT * FROM (
(
SELECT Date(A) as 'Date', SUM(B) as 'B', C, 1 AS 'Sort' FROM TABLE1
WHERE Date(A) = '2021-01-01'
AND C = 20
GROUP BY A, C
)
UNION
(
SELECT A, SUM(B) as 'B', C, 2 FROM TABLE2
WHERE A = '2021-01-01'
AND C = 20
GROUP BY A, C
)
) d
ORDER BY d.Sort
GROUP BY d.Date , d.C;
uj5u.com熱心網友回復:
您不需要子查詢。就像order by在正常情況下一樣使用,select因為排序應用于聯合資料集。limit如果您只想選擇 1 條記錄,則還需要添加
SELECT Date(A) as 'Date', SUM(B) as 'B', C, 1 AS 'Sort'
FROM t1
WHERE Date(A) = '2021-01-01' AND C = 20
GROUP BY Date(A), C --you need Date(A), C instead of A,C
UNION
SELECT A, SUM(B) as 'B', C, 2
FROM t2
WHERE A = '2021-01-01' AND C = 20
GROUP BY A, C
ORDER BY Sort
LIMIT 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331486.html
上一篇:SQL連接與比較運算子問題
