Титла: Mysql недомислица Публикувано от: VladSun в Jun 11, 2007, 14:59
В estate_pictures имаме няколко записа за съответното estates.id. Това не дава грешка и връща само един запис! MySQL 5.0.16-max Титла: Mysql недомислица Публикувано от: mom в Jun 11, 2007, 17:28 махни group by или го направи на order by - подозирам, че второто си искал да направиш, защото първото е безсмислено, освен ако в group by не добавиш и estates.price и estate_pictures.name
В Postgresql изобщо няма да можеш да направиш подобно изказване Титла: Mysql недомислица Публикувано от: VladSun в Jun 11, 2007, 20:22
Аз съм се оправил - със субселект. Въпросът е, че такава SQL заявка не би трябвало изобщо да се изпълни! А и ако направя order by или махна group by в *тази* заявка ще получа мултиплициране на резултата заради това, че имам няколко записа в estate_pictures, които имат исканото estates.id ... Целта на заявката е да изкара по един запис за всеки estates.id със само едно estate_pictures.name. Цялата ми заявка изглежда така ... вече:
Пак повтарям - темата е за това, че MySQL не интерпретира коректно тази заявка - няма агрегираща функция -> няма group by ... Титла: Mysql недомислица Публикувано от: mom в Jun 11, 2007, 23:09 Сега като си чета поста виждам, че не е ясно, но всъщност се опитвах да кажа същото, а именно, че такава заявка (като в първия ти пост) е странна. PostgreSQL не позволява подобна заявка и плаче, че трябва и другите полета в SELECT клаузата да присъстват в GROUP BY.
Не мога да отсъдя дали MySQL-а трябва да позволява такава заявка - нека MySQL гуру-тата се изкажат тука, но от гледна точка на логиката съм съгласен, че не би трябвало да е позволена. VladSun, явно не съм те разбрал каква е целта на заявката (то и ти не си я написал де) и затова си помислих, че искаш да извлечеш резултат ала: имот_1 | цена | ...... | снимка_1 имот_1 | цена | ...... | снимка_2 ............................................. имот_1 | цена | ...... | снимка_N ............................................. имот_M | цена | ...... | снимка_1 имот_M | цена | ...... | снимка_2 .............................................. имот_M | цена | ...... | снимка_K Определено заявката във втория ти пост ще свърши работа. Тъй като не ползвам MySQL ще поразгледам дали мога да се изкажа по подобен начин в PostgreSQL - стана ми интересно. edit: Става и в PostgreSQL:
Титла: Mysql недомислица Публикувано от: VladSun в Jun 11, 2007, 23:40 Честно казано подозирах, че искаш да кажеш същото
![]() Въпросът тук е по-скоро концептуален - нито един SQL engine не би трябвало да позволява подобна заявка - въпреки, че MySQL връща резултат се чупят поне две концепции: 1) group by се използва при агрегиращи функции (*само* AFAIK); 2) резултатът е неопределен - не може да се детерминира кой точно запис от estate_pictures е взет и по какви критерии. Аз поради това писах "недомислица" в заглавието на темата ![]() А относно order by rand () - по-лесен random select няма ![]() |