Re: sql hierachisch darstellen
am 11.04.2006 14:55:49 von Harald Stowasser
Stefan Schwärzler schrieb:
> Hallo,
> gibt es eine standardisierte Methode um eine SQL-Query hierachisch
> darzustellen. Ich arbeite im Bereich der Sprachinterpretation und
> möchte die hierachischen SQL-Anweisungen für einen Algorithmus
> trainieren.
Kann mir nicht vorstellen was genau du da meinst. Ich denke du meinst
die Formatierung um eine Query lesbar darzustellen?
Ich rücke zusammengehörende Blöcke ein. Bei größeren Querys schreibe ich
sogar Terme untereinander. Reservierte Wörter werden groß geschrieben.
Das sieht dann etwa so aus:
SELECT m1.mannschaft AS heim
,m2.mannschaft AS gast
,m1.mannschaft_id AS heim_id
,m2.mannschaft_id AS gast_id
,s.spiel_id AS spiel_id
,if(m1.mannschaft_id=m2.mannschaft_id,'X',
if (s.tore_heim IS NOT NULL,
CONCAT(s.tore_heim,':',s.tore_gast),'-')
) AS ergebnis
,n.nachrichten_id AS nachrichten_id
,CONCAT(m1.sortiername,m1.mannschaft_id) AS sort1
,CONCAT(m2.sortiername,m2.mannschaft_id) AS sort2
FROM r_mannschaft_liga r1,r_mannschaft_liga r2
LEFT JOIN mannschaften m1
ON r1.fk_mannschaft_id=m1.mannschaft_id
LEFT JOIN mannschaften m2
ON r2.fk_mannschaft_id=m2.mannschaft_id
LEFT JOIN spiele s
ON r1.fk_liga_id =s.fk_liga_id
AND r1.fk_mannschaft_id=s.fk_heim_mannschaft_id
AND r2.fk_mannschaft_id=s.fk_gast_mannschaft_id
AND s.status ='aktiv'
LEFT JOIN content.nachrichten n ON s.spiel_id=n.fk_spiel_id
WHERE r1.fk_liga_id =
AND r2.fk_liga_id =
ORDER BY sort1,sort2,s.spiel_id
Oder so:
SELECT mannschaft_id
,mannschaft
,IFNULL(SUM(s1.punkte_heim),0)
+IFNULL(SUM(s2.punkte_gast),0)
+IFNULL(SUM(k.punkte),0)
AS punkte
,IFNULL(SUM(s1.minuspunkte_heim),0)
+IFNULL(SUM(s2.minuspunkte_gast),0)
+IFNULL(SUM(k.minuspunkte),0)
AS minuspunkte
,COUNT(s1.FK_heim_mannschaft_id)
+COUNT(s2.FK_gast_mannschaft_id)
+IFNULL(SUM(k.spiele),0)
AS anzahl
,IFNULL(SUM(s1.tore_heim),0)
+IFNULL(SUM(s2.tore_gast),0)
+IFNULL(SUM(k.tore),0)
AS tore
,IFNULL(SUM(s1.tore_gast),0)
+IFNULL(SUM(s2.tore_heim),0)
+IFNULL(SUM(k.gegentore),0)
AS drin
,SUM(if(s1.tore_heim > s1.tore_gast,1,0))
+SUM(if(s2.tore_gast > s2.tore_heim,1,0)) AS siege
,SUM(if(s1.tore_heim < s1.tore_gast,1,0))
+SUM(if(s2.tore_gast < s2.tore_heim,1,0)) AS verloren
,SUM(if(s1.tore_heim = s1.tore_gast,1,0))
+SUM(if(s2.tore_gast = s2.tore_heim,1,0)) AS unentschieden
,( IFNULL(SUM(s1.tore_heim),0)
+IFNULL(SUM(s2.tore_gast),0)
+IFNULL(SUM(k.tore),0)
)-(IFNULL(SUM(s1.tore_gast),0)
+IFNULL(SUM(s2.tore_heim),0)
+IFNULL(SUM(k.gegentore),0)
) AS differenz
,SUM(if(s1.tore_heim > s1.tore_gast,1,0)) AS heim_siege
,SUM(if(s2.tore_gast > s2.tore_heim,1,0)) AS gast_siege
,SUM(if(s1.tore_heim < s1.tore_gast,1,0)) AS heim_verloren
,SUM(if(s2.tore_gast < s2.tore_heim,1,0)) AS gast_verloren
,SUM(if(s1.tore_heim = s1.tore_gast,1,0)) AS heim_unentschieden
,SUM(if(s2.tore_gast = s2.tore_heim,1,0)) AS gast_unentschieden
FROM mannschaften
,r_mannschaft_liga AS r
,spieltage AS st1
LEFT JOIN korrekturen AS k
ON k.FK_mannschaft_id = mannschaften.mannschaft_id
AND k.FK_spieltag_id = st1.spieltag_id
AND k.FK_liga_id =
LEFT JOIN spiele AS s1
ON s1.FK_heim_mannschaft_id = mannschaften.mannschaft_id
AND s1.FK_spieltag_id = st1.spieltag_id
AND s1.status = 'aktiv'
AND s1.punktevergabeart != 'abgebrochen'
AND s1.punktevergabeart != 'ausgefallen'
AND s1.punktevergabeart != 'verschoben'
AND s1.punktevergabeart != 'verlegt'
LEFT JOIN spiele AS s2
ON s2.FK_gast_mannschaft_id = mannschaften.mannschaft_id
AND s2.FK_spieltag_id = st1.spieltag_id
AND s2.status = 'aktiv'
AND s2.punktevergabeart != 'abgebrochen'
AND s2.punktevergabeart != 'ausgefallen'
AND s2.punktevergabeart != 'verschoben'
AND s2.punktevergabeart != 'verlegt'
WHERE st1.FK_liga_id =
AND r.FK_liga_id =
AND st1.spieltag_id <=
AND r.FK_mannschaft_id = mannschaften.mannschaft_id
GROUP BY mannschaft_id,mannschaft
ORDER BY punkte DESC
,minuspunkte DESC
,differenz DESC
,tore DESC
,drin ASC
,anzahl ASC
,mannschaft