[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