Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 24.08.13 07:55
Hi, Delpher,
Ich will in einer DBTabelle die verschiedenen Feldinhalte, hier verschiedene WPK-Bezeichnungen,
finden. Bisher hat der Befehl auch funktioniert, aber jetzt bekomme ich einen Indexfehler.
wie kann ich den folgenden SQL-Befehl bei gleicher Leistung so ändern, dass kein Union mehr darin vorkommt?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| SQL.Text := format('select distinct WPK1NAME as WPK from "%s" ', [TbSchueler.tablename]) + 'union ' + format('select distinct WPK2NAME as WPK from "%s" ', [TbSchueler.tablename]) + 'union ' + format('select distinct WPK3NAME as WPK from "%s" ', [TbSchueler.tablename]) + 'union ' + format('select distinct WPK4NAME as WPK from "%s" ', [TbSchueler.tablename]); |
Danke für eure Hilfe,
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 24.08.13 09:34
Falls du immer noch die BDE nutzt, wüsste ich keine Möglichkeit das zu erreichen.
Bei echtem SQL sollte da etwas mit JOINs und COALESCE machbar sein denke ich. (So joinen, dass die Zeilen untereinander landen und dann mit coalesce jeweils die erste Spalte ungleich Null nehmen.)
Für diesen Beitrag haben gedankt: D. Annies
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 24.08.13 12:05
Was genau ist denn ein Indexfehler bei Union? Kannst du mal den genauen Fehler posten?
Alternativ könnte man es ja auch von Hand vereinigen, da du distinct ohnehin nur in den Untertabellen verwendest.
Eine andere Frage wäre, ob man vielleicht das Schema umbauen sollte...scheint mir an der Stelle nicht sauber normalisiert zu sein (was sind WPK?).
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Für diesen Beitrag haben gedankt: D. Annies
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Sa 24.08.13 12:45
Bei durchnummerierten Feldnamen schrillen auch bei mir gleich die Alarmglocken, da sie oft auf unzureichende Normalisierung hindeuten. Was bedeuten die Felder denn?
Für diesen Beitrag haben gedankt: D. Annies
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 24.08.13 13:11
WasWeißDennIch hat folgendes geschrieben : | Bei durchnummerierten Feldnamen schrillen auch bei mir gleich die Alarmglocken, da sie oft auf unzureichende Normalisierung hindeuten. Was bedeuten die Felder denn? |
WahlPflichtKurs würde ich schätzen. Das kann man schon so machen, da es immer exakt 4 sind. Dass da allerdings die Namen drinstehen statt einer ID ist wirklich nicht schön. Wäre das ordentlich, wäre die Abfrage hier ein select * from Kursliste...
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Für diesen Beitrag haben gedankt: D. Annies
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Sa 24.08.13 13:39
Eben, ggf. noch mit einem INNER JOIN auf Tbschueler und Gruppierung, dann hätte man wohl das gewünschte Ergebnis.
Für diesen Beitrag haben gedankt: D. Annies
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mo 26.08.13 10:25
Hi, Delpher,
also es wirkt wie durchnummerierte Felder, sind aber wirklich nur Bezeichnungen.
Ich habe, da ich jetzt eine Fallunterscheidung machen muss (die WPK's sind wie die
Realschulen in SH ja vom Kultusmysterium abgeschafft worden und heißen jetzt WPU)
eine Lösung gefunden, die zu funktionieren scheint:
Wenn es eine Vorjahrestabelle ist, prüfe ich 4 mal auf <> NIL.
Bei der diesjährigen Tabelle prüfe ich einmal auf <> NIL und dreimal auf = NIL ---> funzt.
Es ist aber jetzt ein neues Problem aufgetreten, dass ich separat darstellen werde, geht gleich los.
Danke noch einmal
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
|