![]() |
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:
diese liefert aber: 1,2,3,4,5,9,5,2,8,1,7 also nicht das was ich möchte. :cry:
select distinct SBatchNo from Log_GxP_Actions union all Select distinct SBatchNo from Log_Faults
ach ja noch die DB ist Interbase 6.01 und ich benutze die IBX Komponenten für den Zugriff. hoffe das jemand helfen kann. |
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; |
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:
und dann die SQL mit dem distinct machen.
select SBatchNo from Log_GxP_Actions union all Select SBatchNo from Log_Faults
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: |
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. |
Re: SQL Eindeutige UNION Verbindung
Hallo Garby
Zitat:
kannst du mal bitte ein Beispiel posten. Thx schonmal von mir. :coder: |
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:
:gruebel: Das sollte alle BatchNo's erwischen, die sowohl in Tabelle1 als auch in Tabelle 2 enthalten sind.
select distinct
A.BatchNo from Tabelle1 A inner join Tabelle2 B on B.BatchNo = A.BatchNo order by A.BatchNo Gruß |
Re: SQL Eindeutige UNION Verbindung
Hallo Leuselator
Zitat:
(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: |
Re: SQL Eindeutige UNION Verbindung
Du brauchst keine View erzeugen.
SQL-Code:
Das eine normale SQL-Abfrage, deshalb kannst du es auch in deiner Query nutzen.
SELECT SBatchNo
FROM Log_GxP_Actions UNION SELECT SBatchNo FROM Log_Faults UNION gibt dir die Ergebnissmenge ohne Duplikate, UNION ALL mit. Zitat:
|
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. |
Re: SQL Eindeutige UNION Verbindung
Zitat:
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:
Du bekommst keine doppelten Einträge, solange du UNION anstatt UNION ALL verwendest!
SELECT SBatchNo
FROM Log_GxP_Actions UNION SELECT SBatchNo FROM Log_Faults ORDER BY SBatchNo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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 by Thomas Breitkreuz