Witam!
Patrzac dokladnie : :-)
Generalnie, jest blad logiczny w konstrukcji zapytania. Tzn, umieszczasz
kolumny nie podlegajace agregacji obok funkcji agregujacych - i serwer DB nie jest w stanie dac ci sensownych danych.
Zalozmy, ze masz tabelke:
nazwisko | stan_konta | miasto
Kowalik 333 Warszawa
Maliniak 111 Krakow
Janiak 1341 Warszawa
i chcesz wyswietlic zestawienie : miasto | suma na na kontach:
Powinno byc:
select miasto, sum(stan_konta) from klienci group by miasto;
czyli dostaniesz:
warszawa | 1674
krakow | 111
Ale jesli pominiesz klauzule group by - agregacja wykona sie na wszystkich wierszach,a ty dostaniesz:
warszawa|1785
czyli sume dla wszystkich miast a ta 'warszawa' - to dana z przypadkowego wiersza.
I teraz sedno problemu - taki np. postgres da ci od razu blad skladni, jesli pominiesz group by w zapytaniu,
gdzie masz na liscie kolumn kolumny z agregacja i bez agregacji (rozsadnie - zeby uniknac przypadkowych danych i pomylek.
Np. podane przez ciebie zapytanie wg mnie nie podaje danych o ktore Ci chodzi - i nie zauwazylabys tego, gdyby nie blad skladni ;-)).
Z kolei mysql - przypuszczam ze jest to kwestia ustawionego "SQL mode" w serwerze - tj. w mysql'u mozna stosowac rozne
poziomy restrykcyjnosci/liberalnosci silnika analizujacego zapytanie. Twoj jest pewnie liberalny (domyslnie tak jest), a admin
serwera produkcyjnego pewnie podniosl ten poziom. Tak mi przynajmniej intuicja podpowiada.
Aha - nie jestem pewien - ale CROSS JOIN moze wymusic iloczyn kartezjanski mimo ze podalas warunek zlaczenia przez using()
(trzeba sprawdzic priorytet w dokumentacji ). Proponuje samo JOIN na wszelki wypadek.
Jak podeslesz strukture tabelek i oczekiwany wynik, sproboje Ci pomoc zmodyfikowac zapytanie.
Pozdrawiam serdecznie,
Kacper
==============================
Szkolenia PHP, Warszawa
http://www.AplikacjeInternetowe.pl