"We are back" « oc.at

Access Tabellen joinen - Neues Problem 071128

Flip 26.11.2007 - 11:39 908 7
Posts

Flip

1 x 4 Ringe
Registered: Jan 2002
Location: .
Posts: 3398
Hello Coder, folgendes Problem:

Ich habe eine Tabelle wo sagen wir Kundennummern drinnenstehen und 5 weitere Tabellen, wo diese Kundennummern vereinzelt drinnen stehen.

Nun will ich mir eine Abfrage bauen, die überprüft, welche von den Kundennummern in den 5 weiteren Tabellen aufscheint und falls diese aufscheint mir bestimmte Felder aus diesen Tabellen anzeigt.

Fürs Verständnis:

Tabelle1:
Kundennummern

Tabelle2:
Kundennummern
SummeAusgaben
SummeEinnahmen

Tabelle3:
Kundennummern
RatingHistory
LastRating

usw ....

Es kann auch sein, dass eine Kundennummer in mehreren von den 5 weiteren Tabellen aufscheint, wie mache ich das nun am Besten, bei den JOINs zeigt er mir gar nichts an und wenn ichs einfach mit

select feld1, feld2, feld3
from tabelle1, tabelle2, tabelle3
where tabelle1.KuNr = tabelle2.KuNr or tabelle1.KuNr = tabelle3.KuNr

zeigt er mir auch nix an...

tia
Bearbeitet von Flip am 28.11.2007, 10:50

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
wie schaut das join statement aus?

Punisher

Bukanier
Avatar
Registered: Sep 2002
Location: Disneyland
Posts: 1870
kommt in den weiteren Tabellen jede Kundennummer nur einmal vor?

Dann wär mein Vorschlag ca so:
Code:
SELECT Kundennummern.kdnr, Tabelle1.SummeAusgaben,
       Tabelle2.LastRating, Tabelle3.RatingHistory
FROM Kundennummern
INNER JOIN Tabelle1 ON Kundennummern.kdnr = Tabelle1.kdnr
INNER JOIN Tabelle2 ON Kundennummern.kdnr = Tabelle2.kdnr
INNER JOIN Tabelle3 ON Kundennummern.kdnr = Tabelle3.kdnr;

Flip

1 x 4 Ringe
Registered: Jan 2002
Location: .
Posts: 3398
Zitat von Punisher
kommt in den weiteren Tabellen jede Kundennummer nur einmal vor?

Dann wär mein Vorschlag ca so:
Code:
SELECT Kundennummern.kdnr, Tabelle1.SummeAusgaben,
       Tabelle2.LastRating, Tabelle3.RatingHistory
FROM Kundennummern
INNER JOIN Tabelle1 ON Kundennummern.kdnr = Tabelle1.kdnr
INNER JOIN Tabelle2 ON Kundennummern.kdnr = Tabelle2.kdnr
INNER JOIN Tabelle3 ON Kundennummern.kdnr = Tabelle3.kdnr;

danke für die hilfe, das hab ich schon probier, das statement sieht so aus:

Code:
SELECT ALL_ALL_CCN.ALL_ALL_CCN, ALFI_TUE_TRE.ALFI_TUE_SUMSG, GKE.GKE_DATE
FROM ALL_ALL_CCN
INNER JOIN ALFI_TUE_TRE ON ALL_ALL_CCN.ALL_ALL_CCN  = ALFI_TUE_TRE.ALFI_CCN
INNER JOIN GKE.GKE_DATE ON ALL_ALL_CCN.ALL_ALL_CCN = GKE.GKE_CCN;

da krieg ich den fehler "syntax error(missing operator) in query expression"

Flip

1 x 4 Ringe
Registered: Jan 2002
Location: .
Posts: 3398
Problem hat sich erledigt, schuld war die lustige und unlogische Klammernsetzung in MS SQL!

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11342
Und wo ist die Lösung?

Flip

1 x 4 Ringe
Registered: Jan 2002
Location: .
Posts: 3398
Code:
SELECT [3ALL_CCN_DO_NOT_USE].ALL_CCN, [9ALFI].ALFI_TUE_SUMSG, [9ALFI].ALFI_TRE_SUMSG, [9FERMAT].FERMAT_DATE, [9GKE].GKE_DATE, [9RLB_NO_DOUBLE].RLB_RLB, [9TIGER].TGR_NAME, [9TIGER].TGR_ISO_CTRY, [9TIGER].TGR_RELATION, [9TIGER].TGR_CTYPE, [9TIGER].TGR_CTYPE_CODE, [9TIGER].TGR_ISO_CTRY_HELP, [9RESP].CTRY_ANALY, [9RESP].CTRY_SHORT, [9RDB].RDB_AGE_ED, [9RDB].RDB_EDIT_DL, [9RDB].RDB_AGE_RLS, [9RDB].RDB_RATING_DATE, [9RDB].RDB_EQUITY, [9RDB].RDB_RATING2002, [9RDB].RDB_RATING2003, [9RDB].RDB_RATING2004, [9RDB].RDB_RATING2005, [9RDB].RDB_RATING2006
FROM ((((((3ALL_CCN_DO_NOT_USE 
LEFT JOIN 9ALFI ON [3ALL_CCN_DO_NOT_USE].ALL_CCN = [9ALFI].ALFI_CCN) 
LEFT JOIN 9FERMAT ON [3ALL_CCN_DO_NOT_USE].ALL_CCN = [9FERMAT].FERMAT_CCN) 
LEFT JOIN 9GKE ON [3ALL_CCN_DO_NOT_USE].ALL_CCN = [9GKE].GKE_CCN) 
LEFT JOIN 9RLB_NO_DOUBLE ON [3ALL_CCN_DO_NOT_USE].ALL_CCN = [9RLB_NO_DOUBLE].RLB_CCN) 
LEFT JOIN 9TIGER ON [3ALL_CCN_DO_NOT_USE].ALL_CCN = [9TIGER].TGR_CCN) 
LEFT JOIN 9RDB ON [3ALL_CCN_DO_NOT_USE].ALL_CCN = [9RDB].RDB_CCN)
LEFT JOIN 9RESP ON [9TIGER].TGR_ISO_CTRY = [9RESP].CTRY_ISO OR [9TIGER].TGR_ISO_CTRY_HELP = [9RESP].CTRY_ISO
WHERE ((([9TIGER].TGR_ISO_CTRY_HELP)="11" Or ([9TIGER].TGR_ISO_CTRY_HELP)="12" Or ([9TIGER].TGR_ISO_CTRY_HELP)="23" Or ([9TIGER].TGR_ISO_CTRY_HELP)="24" Or ([9TIGER].TGR_ISO_CTRY_HELP)="25" Or ([9TIGER].TGR_ISO_CTRY_HELP)="26" Or ([9TIGER].TGR_ISO_CTRY_HELP)="27" Or ([9TIGER].TGR_ISO_CTRY_HELP)="30" Or ([9TIGER].TGR_ISO_CTRY_HELP)="31" Or ([9TIGER].TGR_ISO_CTRY_HELP)="32" Or ([9TIGER].TGR_ISO_CTRY_HELP)="34" Or ([9TIGER].TGR_ISO_CTRY_HELP)="37" Or ([9TIGER].TGR_ISO_CTRY_HELP)="42" Or ([9TIGER].TGR_ISO_CTRY_HELP)="53" Or ([9TIGER].TGR_ISO_CTRY_HELP)="56" Or ([9TIGER].TGR_ISO_CTRY_HELP)="57" Or ([9TIGER].TGR_ISO_CTRY_HELP)="AT23" Or ([9TIGER].TGR_ISO_CTRY_HELP)="AT24" Or ([9TIGER].TGR_ISO_CTRY_HELP)="XX23" Or ([9TIGER].TGR_ISO_CTRY_HELP)="XX24" Or ([9TIGER].TGR_ISO_CTRY_HELP)="XX27" Or ([9TIGER].TGR_ISO_CTRY_HELP)="XX26" Or ([9TIGER].TGR_ISO_CTRY_HELP)="XX57"));

werds aber mit vb ausprogrammieren, weil ich dann doch noch viel händisch ändern muss wenn ich mir das via sql statement raushol.

im vb ausprogrammieren hätte einfach zu lang gedauert, da ich am freitag ein paar listen bekommen hab und mir dann gesagt wurde, wir hätten als report das das und das....

Flip

1 x 4 Ringe
Registered: Jan 2002
Location: .
Posts: 3398
Ich hole mir 4 Felder aus der DB mit verschiedenen Daten (ist das die Mehrzahl von Datum?) und will diese Felder untereinander vergleichen und das nächstgelegene Datum in ein neues Temporary Feld schreiben.

Mit MIN(expr) kann ich ja nur eine Spalte vergleichen, ich muss aber 4 Felder in einer Zeile vergleichen und das nächstgelegene weitergeben!

Any ideas?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz