เปเบ SQL, เบเปเบฒเบเบญเบฐเบเบดเบเบฒเบ "เบชเบดเปเบเบเบตเป" เบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเบฑเบเบฅเบธ, เบเปเปเปเบกเปเบ "เบงเบดเบเบตเบเบฒเบ" เบกเบฑเบเบเบงเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฑเบเบซเบฒเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบเบเบชเบญเบเบเบฒเบก SQL เปเบเปเบเบเบเบญเบ "เบเปเบญเบเบงเปเบฒเบกเบฑเบเปเบเปเบเบดเบเปเบกเปเบเบงเบดเบเบตเบเบตเปเบกเบฑเบเบเบทเบเบเบฝเบ" เปเบเปเปเบงเบฅเบฒเปเบเบฑเบเบเบฝเบ, เบเปเบญเบกเบเบฑเบ. .
เปเบเบกเบทเปเบเบตเป, เบเบฒเบเบเปเบฒเปเบเปเบเบปเบงเบขเปเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบ, เปเบซเปเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบเบตเปเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบชเบนเปเบเบฒเบเปเบเบชเบฐเบเบฒเบเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเป GROUP/DISTINCT ะธ LIMIT เบเบฑเบโเบเบงเบโเปเบเบปเบฒ.
เปเบเบเบฑเบเบเบธเบเบฑเบ, เบเปเบฒเบเปเบฒเบเบเบฝเบเปเบเบเปเบฒเบฎเปเบญเบเบเป "เบเปเบฒเบญเบดเบเปเบเบทเปเบญเบกเบเปเปเปเบเบทเปเบญเบเบซเบกเบฒเบเปเบซเบผเบปเปเบฒเบเบตเป, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบดเปเบกเบชเบดเปเบเบเบตเปเบเปเปเบฒเบเบฑเบเบเบฑเบเบซเบกเบปเบ, เบเบงเบเบกเบตเบเบฝเบเบญเบฑเบเบเบฝเบงเปเบเบปเปเบฒเบเบฑเปเบ เบเบปเบงเบขเปเบฒเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบฐเปเบ" - เบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบตเปเบกเบฑเบเบเบฐเปเบฎเบฑเบเบงเบฝเบ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเปเปเบเปเบฒเปเบเบฑเบเบเบฑเบเบซเบกเบปเบ.
เปเบฅเบฐเบเบฒเบเบเบฑเปเบเปเบเบปเปเบฒเปเบเบเบเบตเปเบฅเบฐเบกเบฑเบ "เบเบฝเบเปเบเปเปเบฎเบฑเบเบงเบฝเบ", เบเบฒเบเบเบฑเปเบเบกเบฑเบเบกเบตเบเบปเบเบเบฐเบเบปเบเบเบตเปเบเปเปเบเบตเบเปเปเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบฅเบฐเบเบฒเบเบเบฑเปเบเบกเบฑเบเบเปเปเปเบซเปเบเบปเบเบเบฐเบเบปเบเบเบตเปเบเปเปเบเบฒเบเบเบดเบเบขเปเบฒเบเบชเบปเบกเบเบนเบเบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเบเบนเปเบเบฑเบเบเบฐเบเบฒ.

เบเบต, เบญเบฒเบเบเบฐเบเปเปเบเบฐเบเบฑเบเปเบเบซเบผเบฒเบ, เปเบเป ...
โเบเบนเปเบฎเบฑเบโ: เปเบเบปเปเบฒเบฎเปเบงเบก + เบเบงเบฒเบกเปเบเบเบเปเบฒเบ
SELECT DISTINCT
X.*
FROM
X
JOIN
Y
ON Y.fk = X.pk
WHERE
Y.bool_condition; เบกเบฑเบเบเบฐเปเบเปเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเบเปเบญเบเบเบฒเบเบซเบเบฑเบ เปเบฅเบทเบญเบเบเบฑเบเบเบถเบ X เบเบตเปเบกเบตเบเบฑเบเบเบถเบเปเบ Y เบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเปเบเบทเปเบญเบเปเบเบเบตเปเบชเปเบฒเปเบฅเบฑเบ. เบเบฝเบเบเปเบฒเบฎเปเบญเบเบเปเบเปเบฒเบ JOIN โ เปเบเปโเบฎเบฑเบโเบเบฒเบโเบเปเบฒ pk เบซเบผเบฒเบโเบเบฑเปเบ (เปเบเปโเบเบญเบโเบงเปเบฒโเบเปเบฒโเบเบงเบโเบเบตเปโเปเบซเบกเบฒเบฐโเบชเบปเบกโเบเบตเปโเบกเบตโเบขเบนเปโเปเบ Yโ)โ. เบงเบดเบเบตเบเบฒเบเปเบญเบปเบฒเบญเบญเบ? เปเบเปเบเบญเบ DISTINCT!
เบกเบฑเบเปเบเบเบชเบฐเปเบเบฒเบฐเปเบกเปเบ "เบเบงเบฒเบกเบเปเปเบ" เปเบกเบทเปเบญเปเบเปเบฅเบฐเบเบฑเบเบเบถเบ X เบกเบตเบซเบผเบฒเบเบฎเปเบญเบเบเบฑเบเบเบถเบ Y เบเบตเปเบเปเบฝเบงเบเปเบญเบ, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบดเปเบเบเบตเปเบเปเปเบฒเบเบฑเบเปเบเปเบเบทเบเปเบเบเบเปเบฒเบเบญเบญเบเบขเปเบฒเบเบเปเบฒเบซเบฒเบ ...

เปเบเปเปเบเปเบเบงเปเบ? เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ, เบฎเบฑเบเบฎเบนเปเบงเปเบฒเบเบฑเบเบซเบฒเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบเป "เปเบฅเบทเบญเบเบเบฑเบเบเบถเบ X เบชเปเบฒเบฅเบฑเบเบเบตเป Y เบกเบตเบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเปเบเบทเปเบญเบเปเบเบเบตเปเบชเปเบฒเปเบฅเบฑเบ" - เบซเบผเบฑเบเบเบฒเบเบเบตเปเบเบฑเบเบซเบกเบปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบญเบเบเบฒเบเบซเบเบฑเบเบเบฒเบ Y-record เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ.
Nested เบกเบตเบขเบนเป
SELECT
*
FROM
X
WHERE
EXISTS(
SELECT
NULL
FROM
Y
WHERE
fk = X.pk AND
bool_condition
LIMIT 1
); เบเบฒเบเบชเบฐเบเบฑเบเบเบญเบ PostgreSQL เปเบเบปเปเบฒเปเบเบงเปเบฒเปเบ EXISTS เบกเบฑเบเบเบฝเบเบเปเบเบตเปเบเบฐเบเบญเบเบซเบฒเบฅเบฒเบเบเบฒเบเบเปเบฒเบญเบดเบเบเบตเปเปเบเบตเบเบเบทเปเบ, เบฎเบธเปเบเปเบเบปเปเบฒเบเปเปเปเบเป. เบชเบฐเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบกเบฑเบเบเบตเปเบเบญเบเบชเบฐเปเปเบต LIMIT 1 เบเบฒเบเปเบ EXISTS.
เปเบเบปเปเบฒเบฎเปเบงเบกเบเปเบฒเบเบเบฝเบ
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;เบเบฒเบเปเบฅเบทเบญเบเบเบฝเบงเบเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเป, เบเปเบฒเบเปเบฒเปเบเบฑเบ, เบเบฑเบเบเบทเบเบเบฒเบเบเปเปเบกเบนเบเบเบฒเบเบเบฑเบเบเบถเบ Y เบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบตเปเบเบปเบเปเบซเบฑเบ. เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบกเปเบเบชเบปเบเบเบฐเบเบฒเปเบเบเบปเบเบเบงเบฒเบก .
โเปเบเบฑเบเบซเบเบฑเบเบเปเบญเบเบเปเบฒเบเบซเบผเบฒเบโ: DISTINCT [ON] + LIMIT 1
เบเบปเบเบเบฐเปเบซเบเบเปเบเบตเปเบกเปเบเบตเบกเบเบญเบเบเบฒเบเบซเบฑเบเบเปเบฝเบเปเบเบเบชเบญเบเบเบฒเบกเบเบฑเปเบเบเปเบฒเบงเปเบกเปเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเปเบฒเบเบฑเบเบเบฒเบเบเบปเปเบเบซเบฒเบเบฑเบเบเบถเบเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเบเปเบฒเบเปเบญเบเบเบฒเบเบเบฝเบเปเบเปเบซเบเบถเปเบเบซเบผเบทเบชเบญเบเบชเบฒเบกเบญเบฑเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเปเบฅเบฐเบเบตเบเปเปเปเบเบเบตเป:
SELECT DISTINCT ON(X.pk)
*
FROM
X
JOIN
Y
ON Y.fk = X.pk
LIMIT 1;เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบญเปเบฒเบเบเปเบฒเบฎเปเบญเบเบเปเปเบฅเบฐเบเบฐเบเบฒเบเบฒเบกเปเบเบปเปเบฒเปเบเบชเบดเปเบเบเบตเป DBMS เบชเบฐเปเบซเบเบตเปเบซเปเปเบฎเบฑเบ:
- เบเบฒเบโเปเบเบทเปเบญเบกโเบเปเปโเบชเบฑเบโเบเบฒเบโ
- เปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเปเบเบ X.pk
- เบเบฒเบเบฅเบฒเบเบเบฒเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญ, เปเบฅเบทเบญเบเบญเบฑเบเปเบถเปเบ
เบเบฑเปเบเบเบฑเปเบเปเบเบปเปเบฒเปเบเปเบฎเบฑเบเบซเบเบฑเบ? "เบเบฝเบเปเบเปเบซเบเบถเปเบเปเบเบปเปเบฒ" เบเบฒเบเบชเบดเปเบเบเบตเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบ - เปเบฅเบฐเบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบญเบฑเบเบซเบเบถเปเบเบเบตเปเบเปเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบ, เบเบปเบเปเบเปเบฎเบฑเบเบเบฐเบเปเบฝเบเปเบเบเปเบเบงเปเบ? ... "เปเบฅเบฐเบเปเบฒเบเปเปเบกเบตเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบฑเบ, เปเบเบฑเบเบซเบเบฑเบเบเปเบญเบเบเปเบฒเบเบซเบผเบฒเบ?"
SELECT
*
FROM
(
SELECT
*
FROM
X
-- ััะดะฐ ะผะพะถะฝะพ ะฟะพะดััะฝััั ะฟะพะดั
ะพะดััะธั
ััะปะพะฒะธะน
LIMIT 1 -- +1 Limit
) X
JOIN
Y
ON Y.fk = X.pk
LIMIT 1;
เปเบฅเบฐเปเบเปเบซเบปเบงเบเปเปเบเบฝเบงเบเบฑเบเบเบฑเบ GROUP BY + LIMIT 1.
"เบเปเบญเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบก": GROUP + LIMIT implicit
เบชเบดเปเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบเบตเบเบเบถเปเบเบขเบนเปเปเบเบเบเปเบฒเบเบเบฑเบ เบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเปเปเบซเบงเปเบฒเบเปเบเบปเปเบฒ เบชเบฑเบเบเบฒเบ เบซเบผเบท CTEs เปเบกเบทเปเบญเบเบฒเบเบฎเปเบญเบเบเปเบเบณเปเบเบตเบเปเบ:
...
CASE
WHEN (
SELECT
count(*)
FROM
X
LIMIT 1
) = 0 THEN ... เบเบฑเบเบเบฑเบเบฅเบงเบก (count/min/max/sum/...) เบเบทเบเบเบฐเบเบดเบเบฑเบเบขเปเบฒเบเบชเปเบฒเปเบฅเบฑเบเบเบปเบเปเบเบเบธเบเบเบฑเบเบซเบกเบปเบ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเปเบกเบตเบเปเบฒเปเบเบฐเบเปเบฒเบเบตเปเบเบฑเบเปเบเบ GROUP BY. เบเบฝเบเปเบเปเบเบฑเบ LIMIT เปเบเบปเบฒเปเบเบปเปเบฒเบเปเปเปเบเบฑเบเบกเบดเบเบซเบผเบฒเบ.
เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบชเบฒเบกเบฒเบเบเบดเบเปเบเป "เบเปเบฒเบกเบตเบเบฑเบเบเบถเบเบขเบนเปเบเบตเปเบเบฑเปเบ, เบเปเบญเบเบเปเบญเบเบเบฒเบเบเปเปเปเบเบตเบเบเบญเบเปเบเบเบเปเบฒเบเบฑเบ". เปเบเปเบขเปเบฒเปเบฎเบฑเบเปเบเบงเบเบฑเปเบ! เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบทเปเบเบเบฒเบเบกเบฑเบเปเบกเปเบ:
- เบเบฑเบเบชเบดเปเบเบเบตเปเปเบเบปเบฒเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบ เบญเบตเบโเบเบฒเบกโเบเบฒเบโเบเบฑเบโเบเบถเบโเบเบฑเบโเบซเบกเบปเบโ
- เปเบซเปเบซเบผเบฒเบเปเบชเบฑเปเบเปเบเบปเปเบฒเบเบตเปเบเบงเบเปเบเบปเบฒเบฎเปเบญเบเบเป
เบญเบตเบเบเบฒเบกเปเบเบทเปเบญเบเปเบเปเบเบปเปเบฒเบซเบกเบฒเบ, เบกเบฑเบเปเบซเบกเบฒเบฐเบชเบปเบกเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเบซเบเบถเปเบเปเบเบเบฒเบเบเบปเบเปเบเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
(count + LIMIT 1) = 0เบชเบธเบNOT EXISTS(LIMIT 1)(count + LIMIT 1) > 0เบชเบธเบEXISTS(LIMIT 1)count >= Nเบชเบธเบ(SELECT count(*) FROM (... LIMIT N))
โเบซเปเบญเบเปเบเบฑเบเบเบผเบฒเบกเปเบเบปเปเบฒเปเบโ: DISTINCT + LIMIT
SELECT DISTINCT
pk
FROM
X
LIMIT $1เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบตเปเบเปเปเบกเบตเปเบซเบเบเบปเบเบญเบฒเบเบเบฐเปเบเบทเปเบญเบขเปเบฒเบเบเบดเบเปเบเบงเปเบฒเบเปเบฒเบฎเปเบญเบเบเปเบเบฐเบขเบธเบเปเบเบปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบ. เบเบฑเบเบเบตเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบญเบเบซเบฒ $1 เบเบญเบเบเปเบฒเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบเปเบฒเบญเบดเบเบเบตเปเปเบเบปเปเบฒเบกเบฒ.
เบเบฒเบเบเบฑเปเบเปเบเบญเบฐเบเบฒเบเบปเบเบเบตเปเบญเบฒเบเบเบฐเปเบฅเบฐเบเบฐเปเบฎเบฑเบเบงเบฝเบเบเปเบเบญเบเปเบเบเบฑเบ node เปเบซเบกเป เบเบฑเบเบเบฐเบเบตเบเปเบฒเบกเบเบฒเบเบชเบฐเปเบเบ, เบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเปเบโเบเบฑเบโเบเบธโเบเบฑเบโเปเบกเปเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเปเบเปโเปเบโ, เปเบเปโเบเบฑเบโเบเปเปโเบเบฑเบโเปเบเปโ.
เบชเปเบฒเบฅเบฑเบเปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบญเบดเบ เบเบฑเบเบเบถเบเบเบฑเบเปเบปเบเบเบฐเบเบทเบเบเบถเบเบกเบฒ, เปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบ, เปเบฅเบฐเบเบฝเบเปเบเปเบเบฒเบเบเบงเบเบกเบฑเบเบเบฐเบเปเบฒเบเบงเบเบเบตเปเบฎเปเบญเบเบเปเบเบทเบ. เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบเบตเปเปเบชเบเปเบชเบปเปเบฒเปเบเบเบชเบฐเปเบเบฒเบฐเบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบ: $ 1 = 4, เปเบฅเบฐเบกเบตเบซเบผเบฒเบเบฎเปเบญเบเบเบฑเบเบเบฑเบเบเบถเบเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ ...
เปเบเบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบเปเปเปเบชเบเปเบเปเบ vain, เปเบซเปเปเบฎเบปเบฒเปเบเปเบเบฒเบเบชเบญเบเบเบฒเบก recursive :

เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
