اوس، که تاسو په غوښتنه کې لیکلي "لومړی دا نښې وصل کړئ، او بیا ټول نقلونه وباسئ، یوازې یو باید پاتې وي د هر کلی لپاره کاپي" - دا په حقیقت کې دا به څنګه کار وکړي، حتی که پیوستون ته اړتیا نه وي.
او ځینې وختونه تاسو خوشحاله یاست او دا "یوازې کار کوي"، ځینې وختونه دا په فعالیت باندې ناخوښه اغیزه لري، او ځینې وختونه دا اغیزې ورکوي چې د پراختیا کونکي له نظره په بشپړه توګه غیر متوقع وي.
ښه، شاید دومره په زړه پورې نه وي، مګر ...
"خواږه جوړه": یوځای شئ + جلا
SELECT DISTINCT
X.*
FROM
X
JOIN
Y
ON Y.fk = X.pk
WHERE
Y.bool_condition;
دا به روښانه شي چې دوی څه غواړي د X ریکارډونه غوره کړئ د کوم لپاره چې په Y کې ریکارډونه شتون لري چې د بشپړ شوي حالت سره تړاو لري. له لارې یوه غوښتنه لیکلې JOIN - څو ځله د pk ارزښتونه ترلاسه کړل (په دقیق ډول په Y کې څومره مناسب ننوتل څرګند شوي). څنګه لرې کول؟ یقینا DISTINCT!
دا په ځانګړي توګه "خوښونکي" دي کله چې د هر ایکس ریکارډ لپاره څو سوه اړونده Y-ریکارډونه شتون ولري ، او بیا نقلونه په زړورتیا سره لرې کیږي ...
نو تاسو څه ترلاسه کړل؟ "یوازې یو ننوتل" له ځانګړو څخه - او که موږ دا یو له غیر منفرد څخه واخلو، ایا پایله به یو څه بدل شي؟.. "او که توپیر نه وي، نو ولې نور پیسې ورکوو؟"
SELECT
*
FROM
(
SELECT
*
FROM
X
-- сюда можно подсунуть подходящих условий
LIMIT 1 -- +1 Limit
) X
JOIN
Y
ON Y.fk = X.pk
LIMIT 1;
او بالکل ورته موضوع سره GROUP BY + LIMIT 1.
"زه باید پوښتنه وکړم": ضمني ګروپ + LIMIT
ورته شیان په مختلفو وختونو کې واقع کیږي غیر خاليتیا چکونه لکه څنګه چې غوښتنه پرمختګ کوي نښې یا CTEs:
...
CASE
WHEN (
SELECT
count(*)
FROM
X
LIMIT 1
) = 0 THEN ...
مجموعي دندې (count/min/max/sum/...) په بریالیتوب سره په ټوله سیټ کې اجرا کیږي، حتی پرته له واضح لارښوونو GROUP BY. یوازې سره LIMIT دوی ډیر دوستانه ندي.