PDA

View Full Version : sql join



rr2001
26-03-07, 15:24
werte teilnehmer,
ein Thema, schon zigmal behandelt, leider weiß ich es nicht mehr.

2 Tabellen A und B.
ein Satz in Tabelle A kann mehrere passende Verknüpfungen in Tabelle B haben.
Der Satz in Tabelle A darf aber nur einmal angezeigt werden,
egal wieviele Verknüpfungen in Tabelle B er hat.
Allerdings darf er auch nur dann angezeigt werden, wenn mindesten eine Verknüpfung mit Tabelle B vorhanden ist.

Bitte um Lösungsvorschläge.

Danke

Fuerchau
26-03-07, 19:26
select a.f1, a.f2, ...., b.f1, b.f2, ...
from tableA a, tableB b
where
a.key=b.key ... and .....

rr2001
27-03-07, 08:52
so klappt es leider nicht wie gewünscht.

folgender Dateninhalt

Tabelle a....................Tabelle b
key_a1, f01, f02...........key_a1, key_b1, f01, f02, f03...
.................................key_a1, key_b2, f01, f02, f03...
.................................key_a1, key_b3, f01, f02, f03...
.
key_a2, f01, f02...........key_a2, key_b1, f01, f02, f03...
.
key_a3, f01, f02
.
Ein Eintrag in Tabelle a darf nur dann angezeigt werden,
wenn der Key auch in Tabelle b vorkommt.
Der Eintrag sollte aber in der Auflistung nur einmal angezeigt werden, egal wieviele gleiche Schlüssel es in Tabelle b gibt.

key_a1 darf also nur einmal angezeigt werden, obwohl er in Tabelle b dreimal vorkommt.
key_a3 darf nicht angezeigt werden, da er in Tabelle b keine
Verknüpfung hat.

Bitte noch einmal um Antworten.

Danke

plinzen
27-03-07, 09:52
Select t1.fld1, t1.fld2, ... from tabelle t1 inner join tabelle t2 on t1.fld1 = t2.fld1 group by t1.fld1, t1.fld2 , usw (alle Felder die im Select ausgewählt wurden)

Mal so zu probieren.

BenderD
27-03-07, 10:01
Hallo,

(schüttel) was soll denn der arme Kerl da aus der zweiten Datei von mehreren zur Auswahl stehenden Inhalten anzeigen, wenn jetzt die Antwort den ersten kommt, dann ist das kein Fall für SQL, das ist eine
D a t e n b a n k Abfragesprache und nicht für die Verarbeitung von sequentiellen Haufen gedacht. (ich weiß, da gibt es Work arounds...)

mfg

Dieter Bender


so klappt es leider nicht wie gewünscht.

folgender Dateninhalt

Tabelle a....................Tabelle b
key_a1, f01, f02...........key_a1, key_b1, f01, f02, f03...
.................................key_a1, key_b2, f01, f02, f03...
.................................key_a1, key_b3, f01, f02, f03...
.
key_a2, f01, f02...........key_a2, key_b1, f01, f02, f03...
.
key_a3, f01, f02
.
Ein Eintrag in Tabelle a darf nur dann angezeigt werden,
wenn der Key auch in Tabelle b vorkommt.
Der Eintrag sollte aber in der Auflistung nur einmal angezeigt werden, egal wieviele gleiche Schlüssel es in Tabelle b gibt.

key_a1 darf also nur einmal angezeigt werden, obwohl er in Tabelle b dreimal vorkommt.
key_a3 darf nicht angezeigt werden, da er in Tabelle b keine
Verknüpfung hat.

Bitte noch einmal um Antworten.

Danke

holgerscherer
27-03-07, 11:06
(ich weiß, da gibt es Work arounds...)


Uah - bin grade auf einer Kundenmaschine in uralten RPG-Verwurstelungen drin, und Du schreibst was von würgarounds... <g>

-h

Fuerchau
27-03-07, 18:45
Das ist auch keine Sache eines SQL's (der liefert immer nur ganz Zeilen) sondern eines Reporting-Systems.

Query/400 kann das ganz gut, wenn man die Felder der Datei A als Gruppenfelder (Gruppenwechsel) deklariert. Dann werden diese Inhalte tatsächlich nur 1 Mal gedruckt.

Anzeige geht da schon nicht mehr.

Hier kann man dann eher mit QM-Query Formularen arbeiten.
Auch hier werden die Gruppenfelder nur 1 Mal ausgegeben, man kann sogar entscheiden, ob am Anfang, Ende oder in den Kopf/Fuss-Zeilen.
Allerdings hapert es da ein wenig mit der Dezimaleditierung.

Wer es mit PC-Software versucht, kann z.B. MS-Access-Berichte verwenden, auch die können das sehr gut.
Für programmierte Anwendungen hat sich CrystalReports etabliert.

Oder wie wäre es mit:
- .NET/Data
- XML/XSLT
- HTTP
- Bowser (IE, Netscape, ...)
- u.v.m

rr2001
28-03-07, 08:23
hallo Leute,
erstmal vielen Dank für die rege Beteiligung.

Also ganz so wie hier dargestellt ist es nicht.
Man kann z. B. mittels
- with - aus Tabelle b, wo ich ja mehrere Verknüpfungen zu Tabelle a haben kann, eine neue Tabelle erstellen,
wo man pro Key nur mehr einen Eintrag hat.

Plinzen hat mit "goup by" schon einen wichtigen Ansatz dazu geliefert.

Vielen Dank an alle.

RR

BenderD
28-03-07, 08:46
Hallo,

bei all diesen Spielchen kriegt man aus Tabelle B keine Felder, ohne dass man wieder das Mehrfachproblem hat; wenn man von da keine braucht, sondern nur auf die Sätze aus A eingrenzen will, die mindestens einen Satz gleichen Schlüssels in B haben (sowas wie Kunden, die mindestens eine Bestellung haben), dann geht das ohne jeden komplizierten Schnörkel:

select distinct A.*
from A, B
where A.key = B.key

mfg

Dieter Bender



hallo Leute,
erstmal vielen Dank für die rege Beteiligung.

Also ganz so wie hier dargestellt ist es nicht.
Man kann z. B. mittels
- with - aus Tabelle b, wo ich ja mehrere Verknüpfungen zu Tabelle a haben kann, eine neue Tabelle erstellen,
wo man pro Key nur mehr einen Eintrag hat.

Plinzen hat mit "goup by" schon einen wichtigen Ansatz dazu geliefert.

Vielen Dank an alle.

RR