2017-07-27 2 views
0
SELECT u.*, p.name as plan, COUNT(m.user_id) as totalprojects 
FROM users u 
LEFT JOIN plans p ON p.id = u.access 
LEFT JOIN members m ON m.user_id = u.id 
WHERE u.email = 'email address'; 

So habe ich das oben und ich bin mit MySQL auf Mac und versuchteMySQL dies ist unvereinbar mit sql_mode = only_full_group_by

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY'; 

Welche

Abfrage OK sagt zu tun, 0 betroffenen Zeilen (0,00 sec)

SELECT @@sql_mode 

zeigt

+------------------------------------------------------------------------------------------------------------------------+ 
| @@sql_mode                            | 
+------------------------------------------------------------------------------------------------------------------------+ 
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | 
+------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Antwort

1

Ja. Die angegebene Abfrage ist nicht kompatibel mit sql_mode = only_full_group_by. Wenn only_full_group_by aktiviert ist, müssen Sie alle Spalten angeben, die Sie in der GROUP BY-Klausel auswählen. Hier haben Sie keine GROUP BY-Klausel und Sie verwenden auch eine Aggregatfunktion (COUNT). Im Idealfall sollte diese Abfrage fehlschlagen, wenn only_full_group_by aktiviert ist. Standardmäßig ist dies ab MySQL 5.7 aktiviert.

Für Details siehe https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

Verwandte Themen