PostgreSQL Antipatterni: "Solum unum esse oportet!"
In SQL describis quid vis efficere, non quomodo exsecutioni mandari. Itaque quaestio SQL explicandi queries in stilo "sicut auditur quomodo scriptum est" locum obtinet honoris, una cum features de colligendis conditionibus in SQL.
Hodie, exemplis simplicissimis utens, videamus quid hoc in contextu usus efficere possit GROUP/DISTINCT ΠΈ LIMIT cum illis.
Nunc, si scripsisti in petitione Haec signa primum coniunge, deinde omnes duplicates eici; unum tantum sit nam quisque key effingo " - Hoc ipsum quomodo erit labor, etiam si nexus omnino non egeret.
Aliquando autem felix es et " opera iusta " , interdum ingratum effectum in effectu habet , et interdum effectus praebet qui omnino inopinati sunt ex parte elit.
Bene, fortasse non tam spectaculi, sed ...
"Dulce iugo": JOIN + DISTINCTUS
SELECT DISTINCT
X.*
FROM
X
JOIN
Y
ON Y.fk = X.pk
WHERE
Y.bool_condition;
Patet quid volebant selecta monumenta X, pro quibus extant in Y monumenta quae ad conditionem impletam referuntur. Petitio scripsit via JOIN β aliquot pk valores aliquotiens obtinuit (quantum prorsus viscus idoneus in Y apparuit). Quomodo auferam? Certe DISTINCT!
Illud praesertim "gratius" est cum pro singulis X-recordibus complura centum Y-recordiones cognata sunt, tum duplicatae heroice tolluntur...
Quomodo figere? In primis, animadverto problema mutari posse "selectis monumentis X pro quibus in Y est saltem una cum conditione impleta" - tamen, ab ipso Y-recordo nihil egemus.
Neded existit
SELECT
*
FROM
X
WHERE
EXISTS(
SELECT
NULL
FROM
Y
WHERE
fk = X.pk AND
bool_condition
LIMIT 1
);
Aliquae versiones PostgreSQL intellegunt in EXISTERE satis esse primum ingressum qui subit, antiquiores non invenire. Malo igitur semper indicare LIMIT 1 in EXISTS.
LATERALIS 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;
Accessit utilitas talis transformationis inquisitionis facultas facile inquisitionem monumentorum circumscribere, si una tantum vel pauca exigantur, ut in casu sequenti:
SELECT DISTINCT ON(X.pk)
*
FROM
X
JOIN
Y
ON Y.fk = X.pk
LIMIT 1;
Nunc rogationem legimus et conamur intellegere quidnam facere proponatur DBMS;
connectens signa
unique by X.pk
ex reliquis viscus unum
Quid ergo habebatis? "Sicut unum ingressum" ex singularibus, et si accipiamus hoc unum ex non-unis, quodammodo mutabitur?
SELECT
*
FROM
(
SELECT
*
FROM
X
-- ΡΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ
LIMIT 1 -- +1 Limit
) X
JOIN
Y
ON Y.fk = X.pk
LIMIT 1;
Et eodem prorsus argumento est GROUP BY + LIMIT 1.
"Ego iustus have ut rogare": implicita GROUP + LIMIT
Similia occurrunt in diversis non vanitas checks signa CTEs ad petitionem proficit;
...
CASE
WHEN (
SELECT
count(*)
FROM
X
LIMIT 1
) = 0 THEN ...
Subgenera munera (count/min/max/sum/...) feliciter exercentur in universo statuto, etiam sine instructionibus expressis GROUP BY. Tantum cum LIMIT non sunt amicissimi.
In elit potest cogitare "Si ibi sunt monumenta, non opus est mihi plus quam FINIS".. Sed hoc ne feceris! Quia turpe est;
numerare quod volunt secundum omnes records
totidem quot petierint
Secundum scopum conditionibus, unum ex sequentibus substitutionibus opportunum est facere;
(count + LIMIT 1) = 0onNOT EXISTS(LIMIT 1)
(count + LIMIT 1) > 0onEXISTS(LIMIT 1)
count >= Non(SELECT count(*) FROM (... LIMIT N))
"Quantum in P. pendere": DISTINCTUS + LIMIT
SELECT DISTINCT
pk
FROM
X
LIMIT $1
Simplex elit potest sincere credere postulationem exsecutioni mandare desinet. quam primum invenimus $1 primi valorum diversorum occurrentium.
Aliquando in futuro hoc potest et in novo nodo operabitur Index Skip Scansed nondum est exsecutio quae actu exercetur.
Nunc primum Omnes records et insanabilessingularia sunt, et ab eis tantum quantum petitum est. Maxime tristis est si aliquid simile vellemus 1 4 = $et sunt centena milia monumentorum in mensa.