![]() |
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 |
Re: SQL Eindeutige UNION Verbindung
Hallo GeorgeWNewbie
funtioniert scheinbar hatte es nich getestet. :oops: nur das mit dem Order by liefert noch einen Fehler. ISC ERROR CODE:335544569 ISC ERROR MESSAGE: Dynamic SQL Error SQL error code = -104 Invalid command invalid ORDER BY clause also ich mach nochmal eine Kontolle sieht aber gut aus. Da hat mir wohl meine LOGIK einen Streich gespielt denn das war auch meine erste SQL bevor ich gepostet hatte aber da hatte ich wohl die Ergebnismenge nicht geprüft. ALSO NOCHMAL big THX :coder: |
Re: SQL Eindeutige UNION Verbindung
ich dachte bei einem UNION Select kann man kein Order By machen???? :gruebel:
Ich glaube das geht dann nur mit einem View. |
Re: SQL Eindeutige UNION Verbindung
:thuimb: habe geprüft und :dancer2: ist OK
nur das mit dem ORDER BY kann scheinbar nicht gehen. aber ich schau nochmal. |
Re: SQL Eindeutige UNION Verbindung
@ GeorgeWNewbie
das geht und ist ist auch scheinbar richtig: :thuimb:
SQL-Code:
aber ich habe keinen Plan warum Order By nicht will. :gruebel:
SELECT SBatchNo
FROM Log_GxP_Actions UNION SELECT SBatchNo FROM Log_Faults group by sBatchNo :mrgreen: aber man kann nicht alles haben im Leben. |
Re: SQL Eindeutige UNION Verbindung
In Oracle funktioniert es wunderbar.
Ein Ausweg wäre:
SQL-Code:
Aber solange nicht hunderte Einträge in den Tabellen vorkommen, kannst du auch "GROUP BY" nehmen.
SELECT *
FROM (SELECT SBatchNo FROM Log_GxP_Actions UNION SELECT SBatchNo FROM Log_Faults) ORDER BY sBatchNo |
Re: SQL Eindeutige UNION Verbindung
@ GeorgeWNewbie
In Oracle funktioniert es, dann will ich mal hoffen das wir das auch irgendwann einsetzen. Also das (SCHEI... FU... ) Interbase will beides nicht weder in SQL Dialect 1 noch in 3. Da ich aber noch mehr aus der Tabelle benötige werde ich mir nun doch einen View bauen. Na dann :coder: schau ich mal ob alles mit dem View geht. :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 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