15,076
edits
| Line 349: | Line 349: | ||
解決方案:修正後的查詢 (1) SELECT 中的每個欄位要麼放在 GROUP BY 中、或 (2) 使用彙總函數 (如 MAX, MIN, SUM, COUNT, GROUP_CONCAT) | 解決方案:修正後的查詢 (1) SELECT 中的每個欄位要麼放在 GROUP BY 中、或 (2) 使用彙總函數 (如 MAX, MIN, SUM, COUNT, GROUP_CONCAT) | ||
<pre> | <pre> | ||
-- | -- 方法一:取消 `sql_mode=only_full_group_by`: | ||
有兩種方法可以取消 `sql_mode=only_full_group_by`: | |||
1. 暫時性修改 (僅對當前會話有效) | |||
```sql | |||
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); | |||
``` | |||
2. 永久性修改 (修改 MySQL 設定檔) | |||
- 找到 MySQL 設定檔 (通常是 `my.cnf` 或 `my.ini`) | |||
- 在 `[mysqld]` 區段加入或修改: | |||
```ini | |||
[mysqld] | |||
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION | |||
``` | |||
注意事項: | |||
1. 修改設定檔後需要重啟 MySQL 服務才會生效 | |||
2. 不建議取消這個設定,因為: | |||
- 可能導致查詢結果不可預測 | |||
- 違反 SQL 標準 | |||
- 可能在未來版本中產生相容性問題 | |||
建議的做法是修正 SQL 查詢而不是更改 SQL mode。 | |||
-- 方法二: 把所有欄位加入 GROUP BY | |||
SELECT | SELECT | ||
id, | id, | ||
| Line 359: | Line 384: | ||
GROUP BY post_id, author, id, content, likes; | GROUP BY post_id, author, id, content, likes; | ||
-- | -- 方法三: 對非 GROUP BY 的欄位使用彙總函數 | ||
SELECT | SELECT | ||
MAX(id) as id, | MAX(id) as id, | ||