Seite 1 von 1

verschachtelte Select Abfragen.

Verfasst: Fr, 18. Nov 2022 20:29
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

Re: verschachtelte Select Abfragen.

Verfasst: Sa, 19. Nov 2022 10:42
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

Re: verschachtelte Select Abfragen.

Verfasst: Mi, 23. Nov 2022 13:51
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 ...

Re: verschachtelte Select Abfragen.

Verfasst: Mi, 23. Nov 2022 15:08
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.

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 10:04
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.

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:01
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?

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:07
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?

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:27
von Marcus Herz
ja

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:30
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

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:39
von Marcus Herz
das heisst, ein Ergebnis kann auch mehrere gültige Sätze liefern, dann hab ich das falsch interpretiert

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:46
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

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 11:50
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?

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 13:46
von nightcrawler
es ist ein SQL Statement ....ok, ein Script. Ich habe nur die Trennung drin gelassen, damit Du die Teile siehst.

Re: verschachtelte Select Abfragen.

Verfasst: Do, 24. Nov 2022 15:40
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.