PostgreSQL – losowe wartości z podzapytania

UWAGA! Ten wpis ma już 8 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

W PostgreSQL, korzystając z podzapytania używającego funkcji RANDOM() tak, jak np. w MySQL, otrzymamy te same wyniki dla każdego wiersza.

Przykład:

SELECT
    t1.id,
    (SELECT name FROM table2 ORDER BY RANDOM() LIMIT 1) AS random_name
FROM table1 t1

W tym DBMS podzapytanie tego typu wykonuje się raz, więc przy każdym wierszu z tabeli table1 będzie widniała ta sama wartość random_name.

Aby to zmienić, wystarczy sztucznie skorelować podzapytanie z zapytaniem nadrzędnym, np. tak:

SELECT
    t1.id,
    (SELECT name FROM table2 WHERE t1.id = t1.id ORDER BY RANDOM() LIMIT 1) AS random_name
FROM table1 t1

Niby proste, ale jakiś czas temu straciliśmy w pracy na tym trochę czasu (zwłaszcza nie wiedząc, że problem jest związany z podzapytaniami, bo samo zapytanie było bardziej złożone).

Eclipse – ponowne wywołanie informacji kontekstowej

UWAGA! Ten wpis ma już 8 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Gdy w Eclipsie wywołujemy metodę/funkcję, pojawia się informacja kontekstowa z listą jej parametrów wraz z wyróżnieniem właśnie wpisywanego:

Gdy jednak wciśniemy escape lub utracimy focus na metodzie, informacja ta nie pojawia się ponownie, co zawsze było dla mnie problemem (trzeba było najechać na nazwę metody/funkcji, aby uzyskać informację o parametrach). Okazuje się jednak, że aby ponownie wywołać tę podpowiedź wystarczy wcisnąć CTRL+SHIFT+spacja.

Źródła: [1], [2]