排除 MySQL 技術疑難問題: Difference between revisions

Jump to navigation Jump to search
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>
-- 方法一: 把所有欄位加入 GROUP BY
-- 方法一:取消 `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 的欄位使用彙總函數
-- 方法三: 對非 GROUP BY 的欄位使用彙總函數
SELECT  
SELECT  
     MAX(id) as id,
     MAX(id) as id,

Navigation menu