BG Development


Страници: (4) « първа ... 2 3 [4]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Неправилно сортиране по дата
Lachezar
Публикувано на: 28-09-2017, 16:23
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2626
Регистриран на: 10.11.04



QUOTE (wqw @ 28-09-2017, 13:57)
. . . ако нямаш unique по OtherTable.ID . . .

Значи схемата е сбъркана.

Но да, разбирам какво имаш предвид. Наистина тази заявка ще работи ако в OtherTable има само по един ред за всяка стойност на ID. Т.е. ако таблицата е отговаря на условията на UNIQUE CONSTRAINT заявката ще работи, дори да няма такъв CONSTRAINT.

Чудно ми е как не ми се е случвало това icon_eek.gif


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
Lachezar
Публикувано на: 28-09-2017, 16:29
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2626
Регистриран на: 10.11.04



QUOTE (thrawn @ 28-09-2017, 14:32)
http://forums.bgdev.org/index.php?showtopic=47892 това е мотиката която лично мен ме тресна с подобни заявки след като mysql спря да ги поддържа по дефаулт.

Да. Това в PostgreSQL мисля никога не е съществувало като възможност.

Т.е. следната заявка не е минавала (до колкото знам) никога в PostgreSQL:
CODE
SELECT
  a.id,
  b.whatever
FROM
  table_a AS a
 LEFT JOIN
  table_b AS b
  ON b.a_fk = a.id
GROUP BY
 a.id
ORDER BY
 a.id,
 b.date_field

Спомням си, че много хора използваха такава заявка за да получат най-новата или най-старата стойност от множествената страна. По-принцип (може и да греша, но не вярвам) тази конструкция е невалидна в SQL.


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
thrawn
Публикувано на: 28-09-2017, 17:45
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 977
Регистриран на: 17.01.17



Според мен в заявката има само един проблем, не групираш по b.whatever. Всичко друго ми изглежда ОК.
PMEmail Poster
Top
wqw
Публикувано на: 29-09-2017, 07:55
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 5616
Регистриран на: 10.06.04



MySQL и Access третират `b.whatever` в този случай като `FIRST(b.whatever) AS whatever` където FIRST/LAST са доста измислени агрегати, които ги няма в почти никоя RDBMS (а понякога са полезни).

Иначе ако си сигурен че стойностите на whatever са еднакви в групите (има точен UNIQUE по base таблиците) обикновено ползваш MAX вместо FIRST, но пак изглежда като quick&dirty hack.

Обикновено windowing functions намаляват hacky-ness на подобни заявки с неща като ROW_NUMBER() OVER (...) = 1 и пр. . . да не говорим че и често са по-бързи.

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (4) « първа ... 2 3 [4]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0