AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...
Thema durchsuchen
Ansicht
Themen-Optionen

Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

Ein Thema von Der schöne Günther · begonnen am 26. Nov 2013 · letzter Beitrag vom 26. Nov 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

  Alt 26. Nov 2013, 15:17
Datenbank: SQLite • Version: 3.8.1 • Zugriff über: lokal
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?
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#2

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

  Alt 26. Nov 2013, 15:47
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ß.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

  Alt 26. Nov 2013, 16:13
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

  Alt 26. Nov 2013, 16:25
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)".
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
678 Beiträge
 
Delphi 12 Athens
 
#5

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

  Alt 26. Nov 2013, 16:56
Zur Not packst du es in eine View, dann brauchst Du in der Applikation nur das FROM ändern.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Muss ich bei einer SELECT-Abfrage alle Spalten benennen wenn...

  Alt 26. Nov 2013, 23:23
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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