Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query 1 zu n (https://www.delphipraxis.net/10605-query-1-zu-n.html)

Tau 22. Okt 2003 05:10


Query 1 zu n
 
Hallo Leute

habe ein kleines Problem mit meiner Query Sie will nicht so wie ich es will. :wall:

In der Datenbank Demo1 sind ~1000 Daten in der Test1 sind ~3500 Daten.

zwischen Demo1 und Test1 ist eine 1 zu n Beziehung und ich möcht für die Ausgabe ins DBGrid nur immer den ersten Datensatz von Test1 haben.

SQL-Code:
SELECT dbo.Demo1.*, dbo.Test1.*
FROM  dbo.Demo1 RIGHT OUTER JOIN
       dbo.Test1 ON dbo.Demo1.DemID = dbo.Test1.TesDemID
habe aber leider keine Ahnung wie ich meinen Select ummodeln muss damit ich das Ergebnis erhalte.

H I L F E

besten Dank im voraus
Tau

Memo 22. Okt 2003 10:37

Re: Query 1 zu n
 
So könntest du es mal versuchen:
SQL-Code:
SELECT dbo.Demo1.DemID, dbo.Test1.TestDemID
FROM "dbo.Demo1" dbo.Demo1,
        "dbo.Test1" dbo.Test1,
WHERE (dbo.Demo1.DemID = dbo.Test1.TestID)

MrSpock 22. Okt 2003 11:22

Re: Query 1 zu n
 
Hallo Tau,

du musst eine Spalte auswählen aus Test1, von der du nur z.B. das Minimum nimmst. In der Group by Klausel müssen dann aber alle anderen Felder stehen.

Beispiel: Du hast eine Tabelle Abteilung, in der alle Mitarbeiter mit ihren Abteilungen stehen und eine Tabelle Autos, in der alle Autos dieser Mitarbeiter stehen. Du willst aber für jeden Mitarbeiter nur das 1. Auto der Tabelle Autos:

SQL-Code:
select A.ID, MIN(A.Marke), G.abteilung FROM Autos A, abteilung G
WHERE (A.ID = G.ID)
GROUP BY A.ID, G.abteilung

Leuselator 22. Okt 2003 11:24

Re: Query 1 zu n
 
Bitte gewöhnt Euch doch an die Datenbank zu nennen, mit der Ihr arbeitet.

Zum Problem:

Da du nur den 1. Datensatz aus Test1 im DB-Grid anzeigen möchtest, brauchst Du den Kram aus Demo1 ja nicht und dann könnte:
SQL-Code:
          select Top 1 B.*
            from dbo.Demo1 as A
right outer join dbo.Test1 as B
              on B.TestDemID=A.DemID
           order by B.FeldNameNachDemSortiertWerdenSoll
funktionieren
Gruß

Tau 22. Okt 2003 11:41

Re: Query 1 zu n
 
Hallo Memo

klabt leider nicht so ganz.
bekomme immer einen Syntx Fehler unbekant

mfg
Tau

Leuselator 22. Okt 2003 11:50

Re: Query 1 zu n
 
bei Memo ist das Komma vor dem Where überflüssig/schädlich, ausserdem bastelt er einen Crossjoin, den er anschließend in der where-Klausel einschränkt - ist je nach Datenbank extrem langsamer als der Ansatz, den Du selbst mit right outer join gewählt hast.

Tau 22. Okt 2003 11:51

Re: Query 1 zu n
 
Hallo Leuselator

Zitat:

Da du nur den 1. Datensatz aus Test1 im DB-Grid anzeigen möchtest, brauchst Du den Kram aus Demo1 ja nicht und dann könnte:
Das ist so nicht ganz richtig ich brauche sehr wohl einige Spalten aus Demo1
sonst würde das ganze keinen Sinn machen.

mfg
Tau

Leuselator 22. Okt 2003 11:55

Re: Query 1 zu n
 
dann nimm sie halt dazu mit
SQL-Code:
          select Top 1 
                 A.FeldDuBrauchstAusDemo1,
                 A.NochSonFeld,
                 B.* 
            from dbo.Demo1 as A
right outer join dbo.Test1 as B
              on B.TestDemID=A.DemID
           order by B.FeldNameNachDemSortiertWerdenSoll
Das Feld der OrderBy-Klausel bestimmt, welcher Datensatz zu oberst zu stehen kommt und demzufolge zurückgegeben wird.

Du hast immer noch nicht die Datenbank genannt, mit der Du arbeitest :-(

Tau 22. Okt 2003 12:08

Re: Query 1 zu n
 
Hallo Leuselator

Sorry

Zitat:

Du hast immer noch nicht die Datenbank genannt, mit der Du arbeitest
ich arbeite mit MSDE2000

mfg
Tau

Leuselator 22. Okt 2003 12:10

Re: Query 1 zu n
 
dann sollte meine letzte Variante Dein Prob lösen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.
Seite 1 von 2  1 2      

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