AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Suche Erklärung für SQL-Syntax
Thema durchsuchen
Ansicht
Themen-Optionen

Suche Erklärung für SQL-Syntax

Ein Thema von p80286 · begonnen am 15. Mär 2010 · letzter Beitrag vom 16. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 11:37
Datenbank: oracle • Zugriff über: egal
hallo zusammen,

bei einigen "Fremd"-Abfragen sind mir folgende Konstrukte über den Weg gelaufen, für die ich bisher keine vernünftige Erklärung gefunden habe:
SQL-Code:
select 1 from ...

...
where 1=1
  and .....

order by 1,2 ...
wobei ich bisher nur für das "order by 1.." als Erklärung gefunden habe, die Zahlen bezögen sich auf das entsprechende Feld in der Select-Anweisung:
SQL-Code:
select Vorname, Nachname, Strasse ..
...
order by 2,1
entspricht
SQL-Code:
select Vorname, Nachname, Strasse ..
...
order by Nachname, Vorname
Könnt Ihr mir weiter helfen?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 11:40
Code:
SELECT 1 FROM table
heißt das einfach eine Konstante selektiert wird. Damit könntest Du beispielsweise testen, ob die Verbindung zum DB-Server nicht abgebrochen ist.

Code:
WHERE
  1 = 1
Damit wird immer selektiert. Dies und auch das erste könnten darauf hindeuten, dass die Queries dynamisch aufgebaut sind, undzwar sodass diese ohne Restriktion (1 = 1) auch mit dem vordefinierten WHERE formuliert werden können. Aber das sind nur Vermutungen...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 11:52
Hallo,

Zitat:
WHERE
1 = 1
Schreibe ich z.B.

SQL-Code:
Select * From Personal
Where 1=1
wird mir kein Record übergeben,
aber die Feld-Namen der Tabelle.

So könnte man also prüfen, ob bestimmte Felder in der Tabelle vorhanden sind.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 12:13
Bei "WHERE 1=1" werden alle Datensätze übergeben.
Ich denke du meinst "WHERE 1=0"
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 13:17
Vielen Dank für die Antworten,

ich denke ich muß noch eine Erweiterung nachschieben:
SQL-Code:
where 1=1
  and Name='Meier'
  and ....
in diesem Falle scheint es mir doch so, daß das "1=1" nur ein Überrest aus irgendeinem Reportgenerator oder ähnlichem ist, aber vollkommen überflüssig ist.

Gruß
K-H

Nachtrag:
SQL-Code:
select * from tabelle
where 1=0;
liefert bei mir "no rows selected" (Oracle)
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#6

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 13:47
ich hab hier zwei, drei überlegungen...

1 - alles Richtig geklammert, das vergessen die Generatoren manchmal...
2 - kennst du die Quelle? vieleicht kann man da was drehen?
3 - bei automatisch generierten Report´s kanne ich alias mit a1, a2, b1,....
Jörg
have FUN
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 13:54
Zitat:
Nachtrag:

SQL-Code:
select * from tabelle
where 1=0;

liefert bei mir "no rows selected" (Oracle)
Die Bedingung ist auch nie wahr. es wird deshalb eine leere Ergebnismenge aber Metadaten geliefert. Man kann so die Feldname/-typen auslesen
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Suche Erklärung für SQL-Syntax

  Alt 15. Mär 2010, 23:15
Zu dem 1=1 wurde genug gesagt, aber noch zu dem :

Zitat von p80286:
SQL-Code:
select 1 from ...

order by 1,2 ...
wobei ich bisher nur für das "order by 1.." als Erklärung gefunden habe, die Zahlen bezögen sich auf das entsprechende Feld in der Select-Anweisung..
Da gibts ganz andere Anwendungsfälle.

SQL-Code:
SELECT 1,A.ID,A.NR AS NR,A.BEZ,A.BEZ2,R.WERT,R.VERGART
FROM ART8 A JOIN ARTRAB8 R ON
A.ID = R.ID_ART WHERE R.ID_KUNDE = 516 UNION
SELECT 2, W.ID,W.NR AS NR,W.BEZ AS BEZ,'',R.WERT,R.VERGART,
FROM ART8 A,WG8 W JOIN WGRAB8 R ON
W.ID = R.ID_WG WHERE R.ID_KUNDE = 516
Aber nu, wat is dat ? Da kein ORDER BY angegeben ist, sortiert zumindest Firebird nach dem ersten Feld. 1 < 2, also kommt 1 zuerst in die Ergebnismenge und wird auch in Delphi vor dem 2-Krempel angezeigt. In der Praxis siehts nun so aus, dass es sich um Rabatte handelt. Artikel haben Priorität vor der eigenen Warengruppe. Soll das nun umgekehrt rum gemacht werden, dann kann man ohne Änderung an dem obigen SQL-Statement ORDER BY 2,1 dahinter schreiben. Schon ists umgedreht. Alternativ kann man auch für diesen Fall die 1 und 2 vertauschen.

Bevor die Frage kommt : was soll das '' denn da mittendrin ? UNION SELECT verlangt gleiche Anzahl Felder. Es geht allerdings in dem Fall um 2 unterschiedliche Tabellen. Art.Bez, und Art.Bez2 sind zwei Zeilen auf Bildschirm. Aber die Warengruppen haben nur ein Bez-Feld. Was tun ? Ich gaukle der Warengruppe ein zweites (leeres) Feld vor und fertig.

Der Grund für dieses auf den ersten Blick etwas Undurchsichtige : Man kann zumindest in diesem speziellen Fall keine Feldnamen für ORDER BY angeben (zumindest gültig bis FB 2.1). Deshalb der Umweg über die Zahlen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Suche Erklärung für SQL-Syntax

  Alt 16. Mär 2010, 06:30
Die Ergänzung 1=1 in der Where-Klausel wird häufig vom Discoverer verwendet. Bei Oracle wird so die Nutzung des Optimizers erzwungen, vor allem, wenn keine Where-Klausel existiert.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

Re: Suche Erklärung für SQL-Syntax

  Alt 16. Mär 2010, 08:46
Hallo,
where 1=1 hat einen charmanten Vorteil:

Du kannst alle SQL-Statments mit den erforderlichen Spalten und Tabellen ausformulieren und testen.
Wenn nun zur Laufzeit die Wherebedingung geändert/ergänzt werden muss, hast Du in der Regel folgendes "Problem":
Ist schon eine Wehrebedingung vorhanden, wenn nein fängst Du mit Where Spalte = Wert an und hängst weitere Bedingungen mit And an. Ist schon eine Wherebedingung vorhanden, so musst Du mit And anfangen.
Hast Du nun alle Abfragen mit Where 1=1 versehen, brauchst Du Dir keine Gedanken über eine vorhandene oder nicht vorhandene Wehrebedingung machen, sondern kannst immer mit And Spalte=Wert arbeiten. Hierbei ist es dann vollkommen unerheblich, an wievielen Stellen, mit welchen Methoden eine Abfrage um eine Wherebedingung ergänzt wird. Mit And Spalte=Wert liegst Du hier immer richtig und musst das Abfragestatement letztlich nicht im Detail kennen und nicht selbst auf das Vorhandensein einer Wherebedingung überprüfen.
Dies ist vor allem dann praktisch, wenn eine Abfrage bzw. deren Wherebedingung sich erst im Ablauf von einer Reihe unterschiedlicher Programmschritte ergibt.

Gehen wir davon aus, dass Du eine großes Objekt mit vielen Details oder Wiederholgruppen hast, also eine klassische 1:n-Beziehung, so kannst Du einmal den entsprechenden Join formulieren und nachher im Objekt jedem Detail bzw. jeder Wiederholgruppe eine Methode "spendieren", die den entsprechenden Teil der Wherebedingung an die Abfrage anfügt, bzw. den "AND-Teil" der Wherebedingung für sich liefert. Das gut objektorientiert implementiert spart Dir dann viel Arbeit. Ein Methodenaufruf und schon ist die Abfrage um die objektspezifische Wherebedingung ergänzt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:56 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