[linux-l] SQL
Volker Grabsch
vog at notjusthosting.com
Fr Okt 20 07:54:10 CEST 2006
On Fri, Oct 20, 2006 at 01:03:21AM +0200, Frank Reker wrote:
> Am Fri 20. Oct 2006 00:33 +0000 schrieb Olaf Radicke:
>
> >SELECT DISTINCT *
> >FROM mitglied
> >WHERE mitglieds_id IN
> >(
> > SELECT mitglieds_id
> > FROM mitgliederberufe
> > WHERE berufs_id IN
> > (
> > SELECT berufs_id
> > FROM stellen_berufe
> > WHERE stellen_id = /VARIABLE-1/
> > )
> >) LIMIT /VARIABLE-2/ ;
Sub-Selects sind eh nervend. Probier's zuerst mit einem Mehrfach-Select
oder einem JOIN.
> >...Allerdings werden spähter noch die
> >Tabellen "qualitaeten_mitglied", "qualitaeten_stelle", "einschraenkung_mitglied",
> >"einschraenkung_stellen" berücksichtigt. Also noch mehr Sub-SELECT's. Wie
> >würde die JOHN-Variante aussehen? Bzw. eine noch genialere Lösung?
>
> also ich heiss zwar nicht john, von daher weiss ich nicht, wie dessen
> variante aussaehe, aber die join variante waere so:
>
> select distinct a.*
> from mitglied a, mitgliederberufe b, stellen_berufe c
> where a.mitglieds_id = b.mitglieds_id and b.berufs_id = c.berufs_id
> and stellen_id = variable_1;
Genau genommen ist das nicht die JOIN-Variante, sondern das
Mehrfach-SELECT.
... wobei man die Tabellen-Namen nicht unbedingt mit a,b,c abkürzen
sollte, sondern sinnvollere Namen verwendet (z.B. m, mb, sb) oder
sie erstmal gar nicht abkürzt:
select distinct a.*
from mitglied, mitgliederberufe, stellen_berufe
where mitglied.mitglieds_id = mitgliederberufe.mitglieds_id
and mitgliederberufe.berufs_id = stellen_berufe.berufs_id
and stellen_berufe.stellen_id = variable_1;
Außerdem empfehle ich, keine redundanten Namen zu nehmen. Das heißt:
mitglied.mitglieds_id -> mitglied.id
stellen_berufe.stellen_id -> stellen_berufe.id
Es ist übliche Konvention, dass man nur *fremde* IDs (AKA "Fremdschlüssel")
extra benennt, während die eigene ID einfach "id" heißt. Sicher ist
das Geschmackssache, macht aber den SQL-Code und die Datenstruktur für
viele leichter lesbar.
Viele Grüße,
Volker
--
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR
Mehr Informationen über die Mailingliste linux-l