Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn... (https://www.delphipraxis.net/177766-muss-ich-bei-einer-select-abfrage-alle-spalten-benennen-wenn.html)

Der schöne Günther 26. Nov 2013 14:17

Datenbank: SQLite • Version: 3.8.1 • Zugriff über: lokal

Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
 
Meine Query war bislang ein "SELECT * FROM [...]". Nun möchte ich die Werte einer Spalte immer durch eine Funktion bearbeitet haben.

Ich könnte zwar sagen "SELECT spalte_1, Funktion(spalte_2), spalte_3, ... FROM [...]" aber ich möchte meine Spalten hier nicht einzeln aufzählen.

Mir fällt noch "SELECT *, Funktion(spalte_2) as neue_spalte FROM [...]" ein, wodurch aber die "alte" spalte_2 erhalten. Am liebsten hätte ich ganz transparent durch Funktion(spalte_2) ersetzt. Ist das möglich? Wenn ja, wie?

Mikkey 26. Nov 2013 14:47

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
 
Ich kenne zwar nur Oracle und SQL-Server, aber das dürfte keinen Unterschied machen.

Select * selektiert immer alle Spalten, die aus den nachfolgenden Klauseln resultieren, bei einer einzelnen Tabelle also alle deren Spalten, bei einem Join mit einer anderen Tabelle alle Spalten der einen Tabelle plus aller Spalten der anderen.

Eine Möglichkeit
Code:
"* außer Spalte 2"
ist mir nicht bekannt.

Ich finde es aber generell guten Stil, nur Spalten abzufragen, die man auch nutzt, es mag ja mal jemand auf die Idee kommen, ein BLOB oder einen ganzen Sack voll neuer Spalten einzurichten. Dann wird das Recordset immer unnötig groß.

stahli 26. Nov 2013 15:13

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
 
Ich würde eine Funktion schreiben, die Feldnamen sammeln und einen bestimmten mit StringReplace ändern.

Von Hand benennen ist aber i.d.R. sicher sinnvoller, dann weißt Du was Du bekommst.

Der schöne Günther 26. Nov 2013 15:25

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
 
So habe ich es bislang. Über alle TFields einer Tabelle iterieren, und ihren Feldnamen in die Query packen. Es sei denn, das Feld bekommt eine Sonderbehandlung.

Ich hätte es lieber direkt in der SQL-Query gesagt "... aber ersetze Feld x durch Funktion(Feld x)".

joachimd 26. Nov 2013 15:56

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
 
Zur Not packst du es in eine View, dann brauchst Du in der Applikation nur das FROM ändern.

jobo 26. Nov 2013 22:23

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
 
wie joachimd sagt, Views sind Dein Freund. Besonders, wenn Du sie von Anfang an als Zwischenschicht verwendest. Dahinter kannst Du Tabellen, Spalten, Mengen ändern, ohne dass es die Anwendung juckt.
Ich arbeite meist nur mit Views und "Select *"

Für die Variante "Select *, Function(spalte2) as Spalte2 from mytable" braucht es glaub ich auch in sqlite einen Table Alias, also:
"Select a.*, Function(a.spalte2) as Spalte2 from mytable a, .."

Zumindest unter Oracle kenne ich es so, dass Feldnamen im Select mehrfach vorkommen dürfen. Erst in einer Viewdefinition ist das nicht mehr erlaubt.

Da Du Dich über den Grund der Anforderung ausschweigst, bleibt nur die Vermutung "kein Bock,alles umzubauen". Das wäre wirklich ein Fall für einen View.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz