AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Eindeutige UNION Verbindung
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Eindeutige UNION Verbindung

Ein Thema von Cobra · begonnen am 10. Dez 2003 · letzter Beitrag vom 11. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Cobra

Registriert seit: 29. Okt 2002
55 Beiträge
 
#1

SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 13:37
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:
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.
ach ja noch die DB ist Interbase 6.01 und ich benutze die IBX Komponenten für den Zugriff.

hoffe das jemand helfen kann.
MFG
Cobra
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL Eindeutige UNION Verbindung (Gelesen 0 mal)

  Alt 10. Dez 2003, 14:59
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;
  Mit Zitat antworten Zitat
Cobra

Registriert seit: 29. Okt 2002
55 Beiträge
 
#3

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 15:13
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.

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

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



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

MFG
Cobra
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#4

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 15:55
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.
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Cobra

Registriert seit: 29. Okt 2002
55 Beiträge
 
#5

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 16:04
Hallo Garby

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.

kannst du mal bitte ein Beispiel posten.

Thx schonmal von mir.

MFG
Cobra
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 16:11
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
Das sollte alle BatchNo's erwischen, die sowohl in Tabelle1 als auch in Tabelle 2 enthalten sind.

Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Cobra

Registriert seit: 29. Okt 2002
55 Beiträge
 
#7

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 16:32
Hallo Leuselator

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

MFG
Cobra
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 16:36
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 von Oracle doku:
Operator - Returns
--------------------
UNION - All rows selected by either query.

UNION ALL - All rows selected by either query, including all duplicates.
  Mit Zitat antworten Zitat
Cobra

Registriert seit: 29. Okt 2002
55 Beiträge
 
#9

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 17:05
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.
MFG
Cobra
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: SQL Eindeutige UNION Verbindung

  Alt 10. Dez 2003, 17:16
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.
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