Delphi-PRAXiS

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...

Tau 22. Okt 2003 12:37

Re: Query 1 zu n
 
Hallo Leuselator

leider nicht den er gibt mir immer nur einen Daten Satz zurück.

Keine Ahnung warum :wall:

mfg
Tau

Leuselator 22. Okt 2003 12:38

Re: Query 1 zu n
 
na wegen
SQL-Code:
Top 1
Du hast in Deinem 1. Post geschrieben, dass Du nur 1 Datensatz haben möchtest - bei mir bkommt man immer was man will :-)

Tau 22. Okt 2003 19:54

Re: Query 1 zu n
 
Hallo Leuselator

Wahr vielleicht mein Fehler das ich mich so undeutlich ausgedrückt habe.

Sorry. :pale: ich meinte alle Datensätze von Demo1 mit dem ersten von Test1 ( 1 zu 1 )
ohne das von Demo1 oder Test1 doppelt vorhanden sind.

mfg
Tau

Leuselator 23. Okt 2003 01:32

Re: Query 1 zu n
 
Also dann:

SQL-Code:
         select * 
           from dbo.Demo1 as A
left outer join (  select
                       Top 1 
                           *
                      from dbo.Test1
                  order by FeldNameNachDemTest1SortiertWerdenSoll
                ) as B
             on B.TestDemID=A.DemID

Tau 23. Okt 2003 03:36

Re: Query 1 zu n
 
Hallo Leuselator

Danke für deinen Tipp :dancer2: :witch: :dancer2:

Hast was gut bei mir.

mfg
Tau

Tau 23. Okt 2003 09:01

Re: Query 1 zu n
 
Hallo Leuselator

Zu früh gefreut :wall:

es werden alle Daten von Demo1 angezeigt aber nur beim ersten
Datensatz von Demo1 sind die Daten von Test1 dabei bei den andern fehlen die Daten ?

mfg
Tau

Leuselator 23. Okt 2003 12:01

Re: Query 1 zu n
 
Sorry - so kanns wirklich net gehen :oops:
ich selektiere im Subselect immer denselben Datensatz aus Test1 und der passt dann nur mit dem 1. aus Demo1 zusammen *inBodenversink*
probier mal den hier:
SQL-Code:
         select * 
           from dbo.Demo1 as A
left outer join (   select distinct
                           * 
                      from dbo.Test1 
                ) as B
             on B.TestDemID=A.DemID
Gruß

MrSpock 23. Okt 2003 12:02

Re: Query 1 zu n
 
Hallo Tau,

darf ich noch einmal meinen Lösungsvorschlag in Erinnerung rufen :mrgreen: .

Tau 24. Okt 2003 03:39

Re: Query 1 zu n
 
Hallo MrSpock, Leuselator

Habe mich für eine andere Lösung entschieden.
Aus folgenden Grund: Was ist wen ich vielleicht noch eine weiter Tabelle einbinden muss.
Dann geht der ganze Wirbel erst richtig los. Nein Danke. :mrgreen:

Ich habe es mit einer zusätzlichen Spalte und mit Where gelöst und kann jetzt jeder zeit eine oder auch weitere Tabelle einfügen. Muss nur darauf achten das ich beim erstellen und Löschen das berücksichtige.

Danke trozdem für eure hilfe.

mfg
Tau


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr.

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