-
Select mit join erweitern um UNION
Hallo zusammen,
ich habe heute einen sql-befehl, mit dem ich den kundenstamm, eine schlüsseldatei für texte und die auftragspositionen verknüpfe.
Beispiel
SELECT ..felder FROM kundenstamm a join schlüsseldatei b on sdkey2 =branche left join auftragspositionen c on c.firm=a.firm and c.kdnr=a.kdnr inner join artikelstamm d on c.firm = d.firm and c.artnr = d.artnr WHERE firm = '01' and a.branche = '01'...
order by kdnr, artnr for read only
(Feld,- und Dateinamen sind hier symbolisch)
Jetzt muss ich die branche (..and a.branche = '01') aber auch
noch in der datei der versandanschriften mit einbeziehen, weil
dort eine versandanschrift für einen kunden stehen kann, die anders ist als die versandanschrift im Kundenstamm !
Also doch mit UNION hatte ich gedacht
Aber wie, ich kriege es einfach nicht hin, den ersten teil des sql-statements um den UNION zwischen Kundenstamm und Versandadressen zu ergänzen.
SELECT ..felder FROM kundenstamm UNION....
Ist jemand so fit im SQL, dass er das hinkriegt ?
Ich bin eher Autodidakt und hatte so einen Fall bisher nicht
Vielen Dank im Voraus !
Peet
-
... wenn du es hinkriegst dein Problem nachvollziehbar darzustellen, sicher!
D*B
 Zitat von Peet
Ist jemand so fit im SQL, dass er das hinkriegt ?
Peet
-
Die bringst du ganz genauso mit "left join" dazu, wobei du allerdings keine einfache where-Bedingung auf diese Datei machen darfst. Dies führt automatisch zu einem Inner-Join, also:
select ... from FileA A
left join FileB B on a.key=b.key
where a.feld = ... and b.feld=...
ist identisch zu
select ... from FileA A
inner join FileB B on a.key=b.key
where a.feld = ... and b.feld=...
um trotzdem Left-Joins abzufragen ist ein Konstrukt erforderlich:
where ... (b.feld = ... or b.feld is null) ...
Ein Union ist da was ganz anderes:
select a, b, c from DateiA
union [all]
select a, b, c from DateiB
Die Anzahl der Felder beider Select's muss identisch sein, weigehend auch der Ergebnistyp.
-
... wenn wir schon bei der akademischen Diskussion über UNION gelandet sind:
UNION ist (fast) das einzige Konstrukt mit dem man Felder aus unterschiedlichen Quelltabellen im selben Feld der Zieltabelle darstellen kann.
Beispiel:
select name, ort, strasse
from kunde
union
select k.name, a.ort, a.strasse
from kunde k
join adress a
on ...
fast insofern, weil hier partiell ein subselect günstiger sein könnte.
Beispiel:
select k.name, (coalesce((select a.ort from adress a
where a.kdnr = a.kdnr), k.ort)
from kunde k
D*B
 Zitat von Fuerchau
Die bringst du ganz genauso mit "left join" dazu, wobei du allerdings keine einfache where-Bedingung auf diese Datei machen darfst. Dies führt automatisch zu einem Inner-Join, also:
select ... from FileA A
left join FileB B on a.key=b.key
where a.feld = ... and b.feld=...
ist identisch zu
select ... from FileA A
inner join FileB B on a.key=b.key
where a.feld = ... and b.feld=...
um trotzdem Left-Joins abzufragen ist ein Konstrukt erforderlich:
where ... (b.feld = ... or b.feld is null) ...
Ein Union ist da was ganz anderes:
select a, b, c from DateiA
union [all]
select a, b, c from DateiB
Die Anzahl der Felder beider Select's muss identisch sein, weigehend auch der Ergebnistyp.
-
Also ,erst einmal vielen Dank an Fuerchau !
Ich muss die kundenstammsätze und die versandadressen als einen "Topf" haben und nicht mit einander verknüpfen.
Und nicht jeder Kunde hat Sätze in den Versandadressen !
Ich muss aus allen Kundenstamm und Versandadressen die Kundennummern wissen, die die gewünschte Branche haben !
Ich bin daher davon überzeugt, dass ich einen UNIOn brauche.
BenderD, ich hatte Sie als "umgänglicher" kennengelernt !
Ich probiere mal weiter, bei "code400" habe ich gerade einen
interessanten Kontakt.
Nochmals vielen Dank !
Peet
-
Das ist ja dann noch einfacher:
select KDNR from Kunden K
where
exists (select * from FileA A where K.KDNR = A.KDNR and ...)
or
exists (select * from FileB B where K.KDNR = B.KDNR and ...)
... ist dann durch die Suchbedingung für die Branche zu ergänzen.
-
Vorab schon mal WOW !
Ich probiere es heute noch aus !
Danke !
Peet
Similar Threads
-
By martikx in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 28-11-09, 08:17
-
By ahingerl in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 08-12-06, 08:28
-
By cassi in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 22-11-06, 15:03
-
By cheffe1008 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 21-09-06, 16:05
-
By klausgkv in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 08-06-06, 13:47
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks