Ndipo nthawi zina mumakhala ndi mwayi ndipo "zimangogwira ntchito", nthawi zina zimakhala ndi zotsatira zosasangalatsa pa ntchito, ndipo nthawi zina zimapereka zotsatira zomwe sizimayembekezereka kuchokera kwa wopanga.
Chabwino, mwina osati zochititsa chidwi, koma ...
"Okondedwa": JOIN + DISTINCT
SELECT DISTINCT
X.*
FROM
X
JOIN
Y
ON Y.fk = X.pk
WHERE
Y.bool_condition;
Zikadadziwika zomwe akufuna sankhani zolemba X zomwe muli zolembedwa mu Y zomwe zikugwirizana ndi kukwaniritsidwa kwake. Adalemba pempho kudzera JOIN - ali ndi ma pk angapo kangapo (ndendende zingati zomwe zidawonekera mu Y). Kodi kuchotsa? Ndithudi DISTINCT!
"Ndizosangalatsa" makamaka ngati pa X-rekodi iliyonse pali mazana angapo okhudzana ndi ma Y, ndiyeno zobwereza zimachotsedwa mwaulemu ...
Kodi kukonza bwanji? Choyamba, dziwani kuti vutoli likhoza kusinthidwa "sankhani zolemba za X zomwe mu Y muli ZOSAWIRITSA NTCHITO imodzi yokhudzana ndi kukwaniritsidwa" - pambuyo pake, sitifuna kalikonse kuchokera ku Y-rekodi yokha.
Zosungidwa EXISTS
SELECT
*
FROM
X
WHERE
EXISTS(
SELECT
NULL
FROM
Y
WHERE
fk = X.pk AND
bool_condition
LIMIT 1
);
Mabaibulo ena a PostgreSQL amamvetsetsa kuti mu EXISTS ndikokwanira kupeza cholowa choyamba chomwe chimabwera, okalamba samatero. Chifukwa chake ndimakonda kuwonetsa nthawi zonse LIMIT 1 mkati EXISTS.
LATERAL JOIN
SELECT
X.*
FROM
X
, LATERAL (
SELECT
Y.*
FROM
Y
WHERE
fk = X.pk AND
bool_condition
LIMIT 1
) Y
WHERE
Y IS DISTINCT FROM NULL;
Ndiye mwapeza chiyani? "Kungolowa kamodzi" kuchokera kwapadera - ndipo ngati titenga iyi mwa ena omwe si apadera, kodi zotsatira zake zidzasintha mwanjira ina?.. "Ndipo ngati palibe kusiyana, bwanji kulipira zambiri?"
SELECT
*
FROM
(
SELECT
*
FROM
X
-- ΡΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ
LIMIT 1 -- +1 Limit
) X
JOIN
Y
ON Y.fk = X.pk
LIMIT 1;
Ndipo ndendende mutu womwewo ndi GROUP BY + LIMIT 1.