| Autor | 
Beitrag | 
 
D. Annies 
        
 
Beiträge: 1843 
 
windows 7 
D6  Enterprise, D7  Pers und TD 2006 
 | 
Verfasst: Sa 24.08.13 06: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: 19326 
Erhaltene Danke: 1749 
 
W11 x64 (Chrome, Edge) 
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus 
 | 
Verfasst: Sa 24.08.13 08: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 11: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 11: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 12: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 12: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 09: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
  
 | 
 
 |  
 
 
 |