Group: dk.edb.database · Group Profile
Author: Troels ArvinTroels Arvin Date: Aug 23, 2008 04:42
N9 wrote:
> Overstående tabel, ville jeg gerne, at hvis jeg spørge på emne = 5, så
> ville jeg gerne have alle de emne række som er tilknyttet til ref 1 og
> 2, da ref 1 og 2 indholder 5.
> SÃ¥ resultat bliver 2,4,5
Forespørgslen kan udtrykkes vha. en sub-query- eller en self-join-
konstruktion. Personligt finder jeg sub-query konstruktionen mest læsbar.
Ud fra en performance-mæssig betydning burde det være lige meget hvilken
du vælger, idet dit DBMS' optimizer normalt vil udføre begge
konstruktioner på samme måde.
Sub-query-konstruktionen:
SELECT DISTINCT emne
FROM tabel2
WHERE ref IN
(
SELECT ref
FROM tabel2
WHERE emne=5
);
Join-konstruktionen, læsevenlig form:
SELECT DISTINCT t2B.emne
FROM tabel2 AS t2A
JOIN tabel2 AS t2B USING(ref)
WHERE t2A.emne=5;
Join-konstruktionen, mere portabel (og nogle vil sige "sikrere" form,
fordi USING ikke anvendes):
SELECT DISTINCT t2B.emne
FROM tabel2 t2A
JOIN tabel2 t2B ON t2A.ref=t2B.ref
WHERE t2A.emne=5;
--
Troels
|