Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Eindeutige UNION Verbindung (https://www.delphipraxis.net/13063-sql-eindeutige-union-verbindung.html)

Cobra 10. Dez 2003 12:37


SQL Eindeutige UNION Verbindung
 
Hallo @all

Problembeschreibung: Habe zwei Tabellen eine mit Namen Log_GxP_Actions und eine Log_Faults in beiden Tabellen gibt es die Spalte SBatchNo ich möchte für eine ComboBox mit BatchNo jetzt eine SQL machen.

in der 1 Tabelle : steht z.B. in BatchNo 1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,5,5,9,9,9,9,9
in der 2 Tabelle: steht z.B. in BatchNo 5,5,5,2,2,2,8,8,81,1,7,7

jetzt möchte ich in der ComboBox die Auswahl haben aus 1,2,3,4,5,7,8,9 und zwar immer nur einmal also eindeutig aus Tabelle1+ eindeutig aus Tabelle2.

Meine SQL sieht jetzt so aus:
SQL-Code:
select distinct SBatchNo from Log_GxP_Actions union all Select distinct SBatchNo from Log_Faults
diese liefert aber: 1,2,3,4,5,9,5,2,8,1,7 also nicht das was ich möchte. :cry:
ach ja noch die DB ist Interbase 6.01 und ich benutze die IBX Komponenten für den Zugriff.

hoffe das jemand helfen kann.

Bernhard Geyer 10. Dez 2003 13:59

Re: SQL Eindeutige UNION Verbindung (Gelesen 0 mal)
 
Du hast 2 Möglichkeiten:

1, Erstelle einen View aus deiner Union-Abfrage und frage diesen View mittels Select Distinct * from MyView;

2, Fülle die ComboBox "per Hand":
Code:
while query.eof = false do
begin
  // Schon aufgenommen
  if ComboBox.Items.IndexOf(query.Fields[0].AsString) = -1 then
    ComboBox.Items.Add(query.Fields[0].AsString);
  table.next;
end;

Cobra 10. Dez 2003 14:13

Re: SQL Eindeutige UNION Verbindung
 
Hallo Bernhard Geyer

Thx für deine Antwort!

bei dem ersten Teil, wenn ich dich richtig verstanden habe soll ich einen View mit einer SQL etwa so machen.

SQL-Code:
select SBatchNo from Log_GxP_Actions union all Select SBatchNo from Log_Faults
und dann die SQL mit dem distinct machen.

Funktioniert glaube ich, jedenfals im IBExpert :thuimb:

Da hätte ich selbst drauf kommen können. :wall:

:coder:

Aber vieleicht hat ja noch jemand etwas ohne View irgendwie einfach SQL.(denn der View ist eigentlich schon eine DB Änderung oder?)

:coder:

Garby 10. Dez 2003 14:55

Re: SQL Eindeutige UNION Verbindung
 
Hallo Cobra,

du solltest bei UNION-Abfragen immer den Primary-Key mit abfragen, ansonsten kann es vorkommen, dass der Datenbankserver die Ergebnismenge nicht mehr richtig interpretieren kann.

Cobra 10. Dez 2003 15:04

Re: SQL Eindeutige UNION Verbindung
 
Hallo Garby

Zitat:

Zitat von Garby

du solltest bei UNION-Abfragen immer den Primary-Key mit abfragen, ansonsten kann es vorkommen, dass der Datenbankserver die Ergebnismenge nicht mehr richtig interpretieren kann.

Ich verstehe nicht da muß wohl jemand auf meiner Leitung stehen. :gruebel:

kannst du mal bitte ein Beispiel posten.

Thx schonmal von mir.

:coder:

Leuselator 10. Dez 2003 15:11

Re: SQL Eindeutige UNION Verbindung
 
Bin nicht sicher, ob das auch für Deinen Fall ok ist, aber ich würde das so versuchen:
SQL-Code:
    select distinct
           A.BatchNo
      from Tabelle1 A
inner join Tabelle2 B
        on B.BatchNo = A.BatchNo
  order by A.BatchNo
:gruebel: Das sollte alle BatchNo's erwischen, die sowohl in Tabelle1 als auch in Tabelle 2 enthalten sind.

Gruß

Cobra 10. Dez 2003 15:32

Re: SQL Eindeutige UNION Verbindung
 
Hallo Leuselator

Zitat:

Zitat von Leuselator
Bin nicht sicher, ob das auch für Deinen Fall ok ist, aber ich würde das so versuchen:
SQL-Code:
    select distinct
           A.BatchNo
      from Tabelle1 A
inner join Tabelle2 B
        on B.BatchNo = A.BatchNo
  order by A.BatchNo
:gruebel: Das sollte alle BatchNo's erwischen, die sowohl in Tabelle1 als auch in Tabelle 2 enthalten sind.

Gruß

Das würde alles funktionieren wenn es sich um einen FK und einen PK handeln würde.
(aaaaber das ist nicht so und auserdem sieht so aus das in der 1.Tabelle Aktionen (Änderungen) und in der 2.Fehler sind (also Äpfel und Birnen) und die BatchNo kann in beiden Tabellen gleich sein oder in einer Tabellen nur vorhanden sein und ich brauche alle und zwar so als wären sie in einer Tabelle.

hoffe ist verständlich

:coder:

Robert_G 10. Dez 2003 15:36

Re: SQL Eindeutige UNION Verbindung
 
Du brauchst keine View erzeugen.
SQL-Code:
SELECT SBatchNo
FROM  Log_GxP_Actions
UNION
SELECT SBatchNo
FROM  Log_Faults
Das eine normale SQL-Abfrage, deshalb kannst du es auch in deiner Query nutzen.
UNION gibt dir die Ergebnissmenge ohne Duplikate, UNION ALL mit.

Zitat:

Zitat von Oracle doku
Operator - Returns
--------------------
UNION - All rows selected by either query.

UNION ALL - All rows selected by either query, including all duplicates.


Cobra 10. Dez 2003 16:05

Re: SQL Eindeutige UNION Verbindung
 
Hallo GeorgWNewbie,

Danke für die Antwort.

Aber Nein,Nein, Nein so wird es nichts dann bekomme doch folgendes.

Ausgangsdaten:
Bsp.: in Tabelle_1: 1,2,3,4,4,4,5,5,5
in Tabelle_2: 4,5,6,6,6,6,7,7,7

Dann bekomme ich bei deiner SQL: die Menge die in beiden vorhanden ist aber jede Zahl nur einmal also
Ergebnis: 4,5

bei meiner SQL von oben: bekomme ich 1,2,3,4,5,4,5,6,7 (also aus jeder Teilmenge nur jede Zahl einmal und dann die beiden mengen verbunden.)

was ich haben möchte ist aber: 1,2,3,4,5,6,7 also das Ergbnis von meiner SQL nochmal distinct.

Robert_G 10. Dez 2003 16:16

Re: SQL Eindeutige UNION Verbindung
 
Zitat:

Zitat von Cobra
:
Bsp.: in Tabelle_1: 1,2,3,4,4,4,5,5,5
in Tabelle_2: 4,5,6,6,6,6,7,7,7
was ich haben möchte ist aber: 1,2,3,4,5,6,7 also das Ergbnis von meiner SQL nochmal distinct.

Hast du mein Statement ausprobiert?
Es liefert dir 1, 2, 3, 4, 5, 6, 7, da deine Tabellen ja sortiert sind.
Willst du sichergehen (mit der Sortierung), dann mach's so:
SQL-Code:
SELECT SBatchNo
FROM  Log_GxP_Actions
UNION
SELECT SBatchNo
FROM  Log_Faults

ORDER BY SBatchNo
Du bekommst keine doppelten Einträge, solange du UNION anstatt UNION ALL verwendest!


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

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