Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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?

ausblenden 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 ' +                                                                // Indexfehler bei 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 24.08.13 13:11 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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