AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL abfrage aber wie?

SQL abfrage aber wie?

Offene Frage von "Tau"
Ein Thema von Tau · begonnen am 2. Jun 2005 · letzter Beitrag vom 3. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2   
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#1

SQL abfrage aber wie?

  Alt 2. Jun 2005, 23:27
Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO
Hallo Leute

habe leichte Probleme die Anweisung in die Richtige vorm zu bekommen.

folgende Situation

ich habe zwei Tabellen (TB025 u. TB020) die in einer 1 zu n Beziehung stehen.
in der Spalte TB025.F012 sollten keine Doppelten Werte vorkommen.

für die Anzeige brauche ich Folgende Spalten TB025.F012, TB020.F013, TB020.F014

ein Group BY über alle Drei Spalten kann ich nicht machen da ich sonst nicht alle Daten bekomme.

bis jetzt habe ich leider nur das:
SQL-Code:
SELECT TB025.F012 AS TB025F012, TB020.F013 AS TB020F013, TB020.F014 AS TB020F014
FROM TB025 LEFT OUTER JOIN
     TB020 ON TB025.F012 = TB020.F000
kann mir vielleicht einer einen Tipp geben wie ich das Lösen kann.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 00:29
Was ist denn jetzt eigentlich die Frage ?

Möchtest du verhindern, das die Daten aus TB025 mehrfach ausgegeben werden wenn TB020 mehrere korrespondierende Datensätze zu TB025.F012 enthält ? Wenn ja, was soll denn stattdessen ausgegeben werden ?
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 00:56
Hallo jensw_2000

Die Haupt Tabelle ist TB025 und steht in einer 1 zu n Beziehung mit TB020

Wie kann ich das bewerkstelligen das ich das unten angeführte Ergebnis bekomme.

Folgende Spalten TB025.F012, TB020.F013, TB020.F014 Anzeigen kann
ohne das in Spalte TB025.F012 Doppelten Werte habe

schöne Grusse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 01:14
Das geht dann doch aber nur mit einem Group by, es sei denn du willst (z.B.) immer nur den ersten korrespondierenden Datensatz aus TB020 ausgeben oder eine Aggregatfunktion für TB020 verwenden.

SQL-Code:
/* GROUP BY 
TB025.F012 wird jedoch immer noch mehrfach ausgegeben
wenn TB020.F013 und TB020.F014 variable Werte enthalten
*/


SELECT TB025.F012 AS TB025F012,
         TB020.F013 AS TB020F013,
         TB020.F014 AS TB020F014
FROM TB025
         LEFT OUTER JOIN
         TB020 ON TB020.F000 = TB025.F012
GROUP BY TB025.F012,
         TB020.F013,
         TB020.F014

Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 02:01
Hallo Jens

Danke vorerst für deine Antwort

aber gibt es denn nicht ein Möglichkeit das die Group By Funktion nur auf die Spalte TB025.F012
sich bezieht ohne dass ich die anderen Spalten berücksichtigen muss in der Group By.

Gibt es nicht irgend wie eine Möglichkeit mit einer unter abfrage oder so?

z.B.( Select TB025.F012 From TB025 Group By TB025.F012 )
und dann darüber einen Select mit Left outer Join auf die Tabelle TB020 zu legen.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 02:34
Zitat:
z.B.( Select TB025.F012 From TB025 Group By TB025.F012 )
und dann darüber einen Select mit Left outer Join auf die Tabelle TB020 zu legen.
In TB025 ist F012 doch schon eindeutog oder? Sonst wäre es doch keine 1/n sondern eine n/n Beziehung ...

Somit bedeutet das
Select TB025.F012 From TB025 Group By TB025.F012 das selbe wie das
Select TB025.F012 From TB025


Ich denke du hast lediglich folgende Möglichkeiten ...

Code:
Quelldaten

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
1        1             Delphi        Praxis
2        2             Delphi     7
3        3             Beispiel     egal
1        1             Delphi        Praxis
3        3             Beispiel     egal
1        1             Delphi        Praxis
2        2             Delphi     7
3        3             Beispiel     egal
1        1             Delphi        Praxis

Code:
Ergebnis der derzeitigen Abfrage (Group by)

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
1        1             Delphi        Praxis
2        2             Delphi      7
3        3             Beispiel        egal

Mit etwas tricksen die Ausgabe doppelten Werte von TB025.F012 unterdrücken

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
                       Delphi        Praxis
2        2             Delphi        7
3        3             Beispiel        egal

Ausgabe von TB020 abschneiden

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
2        2             Delphi        7
3        3             Beispiel        egal


Datensätze aus TB020 gruppieren und ausgeben, falls weniger als 2 Unterdatensätze in TB020 übrig bleiben, sonst Verweis auf mehrere Datensätze ausgeben

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             (2 Detaildatensatz-Varianten in TB020)
2        2             Delphi        7
3        3             Beispiel        egal


Datensätze aus TB020 nicht guppieren und ausgeben, falls weniger als 2 Unterdatensätze in TB020 vorhanden sind, sonst Verweis auf mehrere Datensätze ausgeben

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             (5 Detaildatensätze in TB020)
2        2             (2 Detaildatensätze in TB020)
3        3             (3 Detaildatensätze in TB020)
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 03:02
Hallo Jens

habe übersehen das es eine n/n Beziehung ist.

au das tut weh

sorry wahr mein Fehler

Zitat:
In TB025 ist F012 doch schon eindeutig oder? Sonst wäre es doch keine 1/n sondern eine n/n Beziehung ...
Bin gerade am testen ob es mit einem Umweg über eine eigene Sicht mit
(Select TB025.F012 From TB025 Group By TB025.F012) und dann über das
Ergebnis eine Select mit Left outer Join auf die Tabelle TB020 geht.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#8

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 06:52
Lass das mit dem View. Views sind nicht immer sofort aktuell.
Ich habe mir in meinem aktuellen Projekt nen Wolf gesucht, weil ich ein paar mal am Tag spontane Fehlausgaben hatte. Dann habe ich Dank Leuselator die Views aus dem "internen" SQL-Code verbannt und .

Wenn ich mir das so anschaue,
SQL-Code:
SELECT TB025.F012 AS TB025F012,
         TB020.F013 AS TB020F013,
         TB020.F014 AS TB020F014
FROM TB025
         LEFT OUTER JOIN
         TB020 ON TB020.F000 = TB025.F012
GROUP BY TB025.F012,
         TB020.F013,
         TB020.F014
und du alle TB025.F012 Werte nur einmal haben möchtest,
dann sollte genau das
SQL-Code:
SELECT TB020.000 AS TB025F012,
         TB020.013 AS TB020F013,
         TB020.014 AS TB020F014
FROM TB020
WHERE TB020.000
         IN
         (
         SELECT DISTINCT TB025.F012
         FROM TB025
         )
die gewünschte Ergebnismenge liefern.


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 08:02
Blöde Frage:
Wo ist der Unterschied zu:
SQL-Code:
SELECT distinct
         TB020.F000 AS TB025F012,
         TB020.F013 AS TB020F013,
         TB020.F014 AS TB020F014
FROM TB020 Join TB025 on TB020.F000 = TB025.F012
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: SQL abfrage aber wie?

  Alt 3. Jun 2005, 08:44
Hallo zusammen

Es funktioniert so wie ich es brauche super.

D A N K E

Schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:37 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