這個問題在這里已經有了答案: 左加入 Where 子句 7 個答案 20 小時前關閉。
我有 2 張桌子
表格1:
| ID | ARRIVAL | DEPARTED | OTHER_COLUMNS |
| ----- | ---------- |-------------- |---------------
| 1 | 2022-07-24 | 0 | data |
| 2 | 2022-07-25 | 0 | data |
| 3 | 2022-07-28 | 0 | data |
| 4 | 2022-07-24 | 0 | data |
表_2:
| ID | DATE | CONDITION | OTHER_COLUMNS |
| ----- | ------- | --------- |-------------- |
| 1 | 2022-07-24 | 0 | data |
| 2 | 2022-07-24 | 1 | data |
| 3 | 2022-07-24 | 1 | data |
| 4 | 2022-07-28 | 1 | data |
這個 MySQL 查詢產生了我期望的結果:
SELECT
`Table_1`.`ID`,
`Table_1`.`ARRIVAL`,
`Table_2`.`DATE`,
`Table_2`.`CONDITION`,
COUNT(Table_2.DATE) AS My_COUNT
FROM
`Table_1`
LEFT JOIN
`Table_2`
ON
`Table_1`.`ARRIVAL` = `Table_2`.`DATE`
WHERE `DEPARTED` = 0
GROUP BY
`Table_1`.`ID`
結果:
| ID | ARRIVAL | My_Count |
| ----- | ---------- |-------------- |
| 1 | 2022-07-24 | 3 |
| 2 | 2022-07-25 | |
| 3 | 2022-07-28 | 1 |
| 4 | 2022-07-24 | 3 |
但我需要一個計數條件:
AND `Table_2`.`CONDITION` = 1
我想產生結果:
| ID | ARRIVAL | My_Count |
| ----- | ---------- |-------------- |
| 1 | 2022-07-24 | 2 |
| 2 | 2022-07-25 | |
| 3 | 2022-07-28 | 1 |
| 4 | 2022-07-24 | 2 |
但我不知道在哪里放置我的“ AND ”陳述句。
當我將它與連接一起放置時:
LEFT JOIN
`Table_2`
ON
`Table_1`.`ARRIVAL` = `Table_2`.`DATE`
WHERE `DEPARTED` = 0
AND `Table_2`.`CONDITION` = 1
并非所有行都從 Table_1 回傳-但My_Count將是準確的。
我需要Table_1中的所有行
如何放置我的“ AND ”陳述句,以便我的查詢將回傳Table_1中具有準確計數列的所有行?
uj5u.com熱心網友回復:
您的查詢無效。為什么 MySQL 不拋出錯誤?我想你是在 MySQL 臭名昭著的作弊模式下作業。確保設定
SET sql_mode = 'ONLY_FULL_GROUP_BY';
以防止 MySQL 抑制此類錯誤。您按 table1.id 分組,但選擇 table2.condition。如您所知,每個 table1.id 沒有一個 table2.condition,那么您的意思是什么?DBMS 必須在此類無效查詢上引發錯誤。我很確定 MySQL 已經默認為 ONLY_FULL_GROUP_BY 很長一段時間了。由于您似乎并非如此,這可能意味著您正在使用非常舊的 MySQL 版本。在這種情況下,您應該考慮升級。
至于查詢:您要外連接條件1行,因此條件屬于連接條件:
LEFT JOIN table_2 ON table_2.date = table_1.arrival AND table_2.condition = 1
不過,我建議您在加入之前養成匯總的習慣。當您使用不同的聚合時,這可以防止以后出現錯誤。
SELECT
t1.*, COALESCE(my_count, 0) AS date_count
FROM table_1 t1
LEFT JOIN
(
SELECT date, COUNT(*) AS my_count
FROM table_2
WHERE condition = 1
GROUP BY date
) t2 ON t2.date = t1.arrival
WHERE t1.departed = 0
ORDER BY t1.id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497115.html
