verschachtelte Select Abfragen.

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

verschachtelte Select Abfragen.

Beitrag von Manfred »

ich muß folgendes nacheinander machen für den Fall der Fälle.

1.

Code: Alles auswählen

select ta.id,
       ta.ticketartbez,
       ta.ticketartdrucktext,
      p.preis,
      SubString(ta.gueltigbis,1,10) AS gueltigbis,
      zstart.zonennummer,
      zziel.zonennummer,
      ts.eavcode
from mandanten kd
LEFT JOIN gemeinsamedaten.haltestellen hststart on hststart.id = kd.idhaltestellestart
LEFT JOIN gemeinsamedaten.haltestellen hstziel on hstziel.id = kd.idhaltestelleziel
left join gemeinsamedaten.zonen zstart on zstart.idhaltestelle=hststart.id
left join gemeinsamedaten.zonen zziel on zziel.idhaltestelle=hstziel.id
left join gemeinsamedaten.relation rel ON rel.zonennummerstart=zstart.zonennummer <----
left join gemeinsamedaten.ticketsortiment ts on ts.relationbez=rel.relationbez
left JOIN gemeinsamedaten.ticketarten ta on ta.ticketartcode=ts.ticketartcode
left JOIN gemeinsameDaten.preis p on p.preisstufecode=ts.preisstufecode and p.ticketartcode = ts.ticketartcode
where kd.id = '{#idmandant#}' and rel.relationbez=zstart.zonennummer + '-' + zziel.zonennummer  <----
ORDER by ta.ticketartbez
wenn nichts herauskommt dann das

Code: Alles auswählen

select ta.id,
       ta.ticketartbez,
       ta.ticketartdrucktext,
      pst.preis,
      SubString(ta.gueltigbis,1,10) AS gueltigbis,
      zstart.zonennummer,
      zziel.zonennummer,
      ts.eavcode
from mandanten kd
LEFT JOIN gemeinsamedaten.haltestellen hststart on hststart.id = kd.idhaltestellestart
LEFT JOIN gemeinsamedaten.haltestellen hstziel on hstziel.id = kd.idhaltestelleziel
left join gemeinsamedaten.zonen zstart on zstart.idhaltestelle=hststart.id
left join gemeinsamedaten.zonen zziel on zziel.idhaltestelle=hstziel.id
left join gemeinsamedaten.relation rel ON rel.zonennummerstart=zziel.zonennummer  <----
left join gemeinsamedaten.ticketsortiment ts on ts.relationbez=rel.relationbez
left JOIN gemeinsamedaten.ticketarten ta on ta.ticketartcode=ts.ticketartcode
left JOIN gemeinsameDaten.preis pst on pst.preisstufecode=ts.preisstufecode and pst.ticketartcode = ts.ticketartcode
where kd.id = '{#idmandant#}' and rel.relationbez=zziel.zonennummer + '-' + zstart.zonennummer  <----
ORDER by ta.ticketartbez
wenn dabei nichts raus kommt dann das.

Code: Alles auswählen

select ta.id,
       ta.ticketartbez,
       ta.ticketartdrucktext,
      pst.preis,
      SubString(ta.gueltigbis,1,10) AS gueltigbis,
      zstart.zonennummer,
      zziel.zonennummer,
      ts.eavcode
from mandanten kd
LEFT JOIN gemeinsamedaten.haltestellen hststart on hststart.id = kd.idhaltestellestart
LEFT JOIN gemeinsamedaten.haltestellen hstziel on hstziel.id = kd.idhaltestelleziel
left join gemeinsamedaten.zonen zstart on zstart.idhaltestelle=hststart.id
left join gemeinsamedaten.zonen zziel on zziel.idhaltestelle=hstziel.id
left join gemeinsamedaten.relation rel ON rel.zonennummerstart=zstart.zonennummeruebergeordnet  <----
left join gemeinsamedaten.ticketsortiment ts on ts.relationbez=rel.relationbez
left JOIN gemeinsamedaten.ticketarten ta on ta.ticketartcode=ts.ticketartcode
left JOIN gemeinsameDaten.preis pst on pst.preisstufecode=ts.preisstufecode and pst.ticketartcode = ts.ticketartcode
where kd.id = '{#idmandant#}' and rel.relationbez=zstart.zonennummeruebergeordnet + '-' + zziel.zonennummer  <----
ORDER by ta.ticketartbez
wenn dabei nichts herauskommt dann das

Code: Alles auswählen

select ta.id,
       ta.ticketartbez,
       ta.ticketartdrucktext,
      pst.preis,
      SubString(ta.gueltigbis,1,10) AS gueltigbis,
      zstart.zonennummer,
      zziel.zonennummer,
      ts.eavcode
from mandanten kd
LEFT JOIN gemeinsamedaten.haltestellen hststart on hststart.id = kd.idhaltestellestart
LEFT JOIN gemeinsamedaten.haltestellen hstziel on hstziel.id = kd.idhaltestelleziel
left join gemeinsamedaten.zonen zstart on zstart.idhaltestelle=hststart.id
left join gemeinsamedaten.zonen zziel on zziel.idhaltestelle=hstziel.id
left join gemeinsamedaten.relation rel ON rel.zonennummerstart=zziel.zonennummeruebergeordnet  <----
left join gemeinsamedaten.ticketsortiment ts on ts.relationbez=rel.relationbez
left JOIN gemeinsamedaten.ticketarten ta on ta.ticketartcode=ts.ticketartcode
left JOIN gemeinsameDaten.preis pst on pst.preisstufecode=ts.preisstufecode and pst.ticketartcode = ts.ticketartcode
where kd.id = '{#idmandant#}' and rel.relationbez=zziel.zonennummeruebergeordnet + '-' + zstart.zonennummer  <----
ORDER by ta.ticketartbez
und noch ein paar ähnliche Durchläufe weiter.
Kann man sowas in einen SQL Befehl unterbringen?

ich habe mal <---- dran gemacht worauf es ankommt und wo die Unterschiede liegen. Diese ganzen einzelnen Scripte müßten wenn mit ODER verknüft werden. Also entweder der 1. oder der 2. usw. Anders gesagt, die jweils mit <---- gekennzeichneten gehören immer als Paar zusammen
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von Marcus Herz »

ich denk, bei ads kannst du die alle mit union verknüpfen, wenn die Spalten übereinstimmen, der 1.Satz ist immer der, der in der Reihenfolge der UNION Selects gefunden wurde. Du darfst nur kein order by anhängen
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von UliTs »

Marcus Herz hat geschrieben: Sa, 19. Nov 2022 10:42 ... Du darfst nur kein order by anhängen
Order By ist dann auf folgende Weise möglich:

Code: Alles auswählen

select * from (
... union ... )
order by ...
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von Marcus Herz »

Code: Alles auswählen

order by
ist richtig in der Syntax, aber dann ist unter Umständen die Reihenfolge der Union-Selects durcheinander und nicht das erste Ergebnis als erster Satz.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von UliTs »

Marcus Herz hat geschrieben: Mi, 23. Nov 2022 15:08

Code: Alles auswählen

order by
ist richtig in der Syntax, aber dann ist unter Umständen die Reihenfolge der Union-Selects durcheinander und nicht das erste Ergebnis als erster Satz.
Das verstehe ich nicht. Ohne Order By ist die Reihenfolge nicht definiert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von Marcus Herz »

In dem speziellen Fall wollte Manfred ja das Ergebnis von ersten Select, wenn da kein Ergebnis, dann vom zweiten Select, etc....
UNION hängt einfach die Ergbenisse der SELECT hintereinander, die Reihenfolge ist also sequentiell, der erste Satz ist dann das erste SELECT mit Ergebnis, bingo?
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: verschachtelte Select Abfragen.

Beitrag von Manfred »

bedeutet UNION jetzt, das alle Ergbnisse hintereinander stehen. Wenn also der erste Befehl was bringt, dann kommt der 2. usw. und wenn alle etwas liefern, aber unterschiedlich Werte, dann würden die alle drin stehen? Nur doppelte Werte werden eliminiert?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von Marcus Herz »

ja
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: verschachtelte Select Abfragen.

Beitrag von Manfred »

hm,
dann ist das keine Lösung für mich. Es darf immer nur 1 Ergebis vorhanden sein. Deshalb steht ja oben, wenn das 1. nichts wird, dann das 2. wenn das nichts wird, das 3. usw. Es darf nichts vermischt werden
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von Marcus Herz »

das heisst, ein Ergebnis kann auch mehrere gültige Sätze liefern, dann hab ich das falsch interpretiert
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von nightcrawler »

ich versuche es mal

Code: Alles auswählen

try DROP TABLE #ergebnis; catch all end;

Code: Alles auswählen

select ta.id,
       ta.ticketartbez,
       ta.ticketartdrucktext,
      p.preis,
      SubString(ta.gueltigbis,1,10) AS gueltigbis,
      zstart.zonennummer,
      zziel.zonennummer,
      ts.eavcode
      
      INTO #ergebnis
      
from mandanten kd
LEFT JOIN gemeinsamedaten.haltestellen hststart on hststart.id = kd.idhaltestellestart
LEFT JOIN gemeinsamedaten.haltestellen hstziel on hstziel.id = kd.idhaltestelleziel
left join gemeinsamedaten.zonen zstart on zstart.idhaltestelle=hststart.id
left join gemeinsamedaten.zonen zziel on zziel.idhaltestelle=hstziel.id
left join gemeinsamedaten.relation rel ON rel.zonennummerstart=zstart.zonennummer <----
left join gemeinsamedaten.ticketsortiment ts on ts.relationbez=rel.relationbez
left JOIN gemeinsamedaten.ticketarten ta on ta.ticketartcode=ts.ticketartcode
left JOIN gemeinsameDaten.preis p on p.preisstufecode=ts.preisstufecode and p.ticketartcode = ts.ticketartcode
where kd.id = '{#idmandant#}' and rel.relationbez=zstart.zonennummer + '-' + zziel.zonennummer  <----
ORDER by ta.ticketartbez

Code: Alles auswählen

if not exists (SELECT * FROM #ergebnis) THEN

select ta.id,
       ta.ticketartbez,
       ta.ticketartdrucktext,
      pst.preis,
      SubString(ta.gueltigbis,1,10) AS gueltigbis,
      zstart.zonennummer,
      zziel.zonennummer,
      ts.eavcode
      
      INTO #ergebnis
      
      
from mandanten kd
LEFT JOIN gemeinsamedaten.haltestellen hststart on hststart.id = kd.idhaltestellestart
LEFT JOIN gemeinsamedaten.haltestellen hstziel on hstziel.id = kd.idhaltestelleziel
left join gemeinsamedaten.zonen zstart on zstart.idhaltestelle=hststart.id
left join gemeinsamedaten.zonen zziel on zziel.idhaltestelle=hstziel.id
left join gemeinsamedaten.relation rel ON rel.zonennummerstart=zziel.zonennummer  <----
left join gemeinsamedaten.ticketsortiment ts on ts.relationbez=rel.relationbez
left JOIN gemeinsamedaten.ticketarten ta on ta.ticketartcode=ts.ticketartcode
left JOIN gemeinsameDaten.preis pst on pst.preisstufecode=ts.preisstufecode and pst.ticketartcode = ts.ticketartcode
where kd.id = '{#idmandant#}' and rel.relationbez=zziel.zonennummer + '-' + zstart.zonennummer  <----
ORDER by ta.ticketartbez

end;


usw.

Code: Alles auswählen

select * from #ergebnis
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: verschachtelte Select Abfragen.

Beitrag von Manfred »

ist das nicht so ähnlich wie mein Eingangsposting?
Ich erweitere mal die Eingangsfrage, würde das überhaupt einen Tempovorteil bringen, wenn ich es nicht so lösen würde wie mein Eingangsposting? Also, wenn es in einem SQL String stehen würde?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von nightcrawler »

es ist ein SQL Statement ....ok, ein Script. Ich habe nur die Trennung drin gelassen, damit Du die Teile siehst.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: verschachtelte Select Abfragen.

Beitrag von UliTs »

Marcus Herz hat geschrieben: Do, 24. Nov 2022 11:01 UNION hängt einfach die Ergbenisse der SELECT hintereinander, die Reihenfolge ist also sequentiell, der erste Satz ist dann das erste SELECT mit Ergebnis, bingo?
Ich gebe Dir zwar recht, dass das beim ADS (und sicher den meisten anderen SQL-Servern so ist, aber garantiert ist es nicht.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten