SQL Abfrage
C. Andrä
- datenbank
Guten Morgen,
vielleicht kann mir einer Helfen ich kommte nicht klar mir denn Inner Join und der Right Join. wenn ich beide getrend benutze klappt das aber ich möchte bei in einer ab frage benutzern.
z.B
SELECT dbo.ANSPRECHPARTNER.ANREDE AS AAnrede, dbo.ANSPRECHPARTNER.TITEL AS ATitel, dbo.ANSPRECHPARTNER.NAME AS AName,
dbo.ANSPRECHPARTNER.VORNAME AS AVorname, dbo.ANSPRECHPARTNER.TELEFON AS ATelefon,
dbo.ANSPRECHPARTNER.MOBIL AS ATelefonMobil, dbo.ANSPRECHPARTNER.FAX AS ATelefax, dbo.ANSPRECHPARTNER.EMAIL AS AEMail,
dbo.ANSPRECHPARTNER.PRIVSTRASSE AS APrivatStrasse, dbo.ANSPRECHPARTNER.PRIVPLZ AS APrivatPLZ,
dbo.ANSPRECHPARTNER.PRIVORT AS APrivatOrt, dbo.ANSPRECHPARTNER.FUNKTION AS AFunktion,
dbo.ANSPRECHPARTNER.ABTEILUNG AS AAbteilung, dbo.ANSPRECHPARTNER.BRIEFANREDE AS ABriefanrede,
dbo.FACHBEREICH.FACHBEREICH AS ABetreuerFachbereich, dbo.MITARBEITER.NAME AS ABetreuerNachname,
dbo.MITARBEITER.VORNAME AS ABetreuerVorname, dbo.ANSPRECHPARTNER.ANSPRECHPARTNERID AS AID,
MITARBEITER_1.NAME AS FVerantwortlicherNachname, MITARBEITER_1.VORNAME AS FVerantwortlicherVorname, dbo.FIRMA.NAME AS FName,
dbo.FIRMA.NAMELANG AS FNameLang, dbo.FIRMA.STRASSE AS FStrasse, dbo.FIRMA.PLZ AS FPLZ, dbo.FIRMA.ORT AS FOrt,
dbo.FIRMA.PLZ_PF AS FPLZPF, dbo.FIRMA.PF AS FPF, dbo.FIRMA.TELEFON AS FTelefon, dbo.FIRMA.TELEFAX AS FTelefax,
dbo.FIRMA.INTERNET AS FInternet, dbo.FIRMA.BUNDESLAND AS FBundesland, dbo.FIRMA.EMAIL AS FEMail, dbo.FIRMA.BRANCHE AS FBranche,
dbo.FIRMA.MOBIL AS FTelefonMobil, dbo.FIRMA.DATUM_EDIT AS FDatumEdit, dbo.FIRMA.DATUM_NEU AS FDatumNeu,
dbo.ANSPRECHPARTNER.DATUM_EDIT AS ADatumEdit, dbo.ANSPRECHPARTNER.DATUM_NEU AS ADatumNeu,
dbo.MITARBEITER.DATUM_EDIT AS MDatumEdit, dbo.MITARBEITER.DATUM_NEU AS MDatumNeu,
dbo.FIRMA.DEAKTIV + dbo.ANSPRECHPARTNER.DEAKTIVIERT AS FADeaktiv, dbo.FIRMA.FIRMAID AS FID
FROM dbo.FIRMA INNER JOIN
dbo.ANSPRECHPARTNER ON dbo.FIRMA.FIRMAID = dbo.ANSPRECHPARTNER.FIRMA_ID INNER JOIN
dbo.MITARBEITER ON dbo.ANSPRECHPARTNER.BETREUER = dbo.MITARBEITER.MITARBEITERID INNER JOIN
dbo.FACHBEREICH ON dbo.MITARBEITER.FACHBEREICHNR = dbo.FACHBEREICH.FACHBEREICHNR INNER JOIN
dbo.MITARBEITER MITARBEITER_1 ON dbo.FIRMA.VERANTWORTLICHER = MITARBEITER_1.MITARBEITERID
und jetzt möchte ich den right Join hinzufügen
dbo.LAND RIGHT JOIN dbo.ANSPRECHPARTNER ON dbo.LAND.ISOALPHA2 = dbo.ANSPRECHPARTNER.LKZ
aber es klappt nicht so wioe ich möchte kann mir einer helfen bitte, bitte, bitte....
vielen danke im voraus.
der Right Join muss so mit einer anderen Tabelle verbunden sein aber ich bekomme es trotz dem nicht hin
dbo.LAND RIGHT JOIN dbo.FIRMA ON dbo.LAND.ISOALPHA2 = dbo.FIRMA.LKZ
geht das über haut Inner Join und Right Join zusammen???
Es wäre wirklich sehr nett wenn mir einer helfen könnte
yo,
wenn du die query hier angibst, musst du nicht alle spalten auflisten, die angezeigt werden sollen. in deinem falle sind das doch recht viele und das macht es ein wenig unübersichtlich.
aber es klappt nicht so wioe ich möchte kann mir einer helfen bitte, bitte, bitte....
was bedeutet "es klappt nicht" genau, das wäre wichtig zu wissen, was du überhaupt erreichen willst.
geht das über haut Inner Join und Right Join zusammen???
ja, aber ich vermute mal, in deinem falle wird das alles zu OUTER JOINS, damit es klappt. aber bis jetzt wissen wir noch gar nicht, was du genau willst. mein schuss ins blaue, mach mal alle INNER JOINS zu RIGHT JOINS. abe ohne zu wissen, was du erreichen willst ist das einfach nur raten.
Es wäre wirklich sehr nett wenn mir einer helfen könnte
die das können gibt es hier bestimmt und meistens sind sie auch nett...
Ilja
Die Abfrage habe ich nicht zusammen gebaut sondern ein andere ich sollte nur noch eine Spalte mehr hinzufügen (und das war das Land).
ich benutze sehr selten Join's sonst mache ich das über die Schlüssel.
Erst mal die Situation. Ich schreibe ein Script die Kontakte in Outlook rein schreibt und es sind nicht grade wenige (der Vorgänger hat eine Sicht erstellt wo er drauf zugreift und da wollte ich an setzten.)
Wenn ich die Land Tabelle und die Firma Tabelle mit dem Right Join verbinde bekomme ich das so wie ich es möchte.
Es werde mir alle Firmen mit dem Land angezeigt und nicht nur die Abkürzung.
(und was die Abfrage ausgeben soll sind alle Ansprechpartner, die dazu gehörige Firma (Anschrift usw.)den Verantwortlichen der Firma und Betreuer den Ansprechpartners in kurzen Punkten erklärt)
Ich hoffe das ich mich jetzt besser ausgedrückt habe.
Einen schönen Tag noch
yo,
ich benutze sehr selten Join's sonst mache ich das über die Schlüssel.
immer wenn du mehr als eine tabelle in einer abfrage hast, wird ein Join gebildet. und in aller regel erfolgt das auch immer über schlüssel. der INNER JOIN hat allredings aber eine zusätzliche schreibweise, so dass man die schlüsselwörter nicht immer mit angeben muss.
Wenn ich die Land Tabelle und die Firma Tabelle mit dem Right Join verbinde bekomme ich das so wie ich es möchte.
Es werde mir alle Firmen mit dem Land angezeigt und nicht nur die Abkürzung.
ist den hier ein RIGHT JOIN notwendig ? das hört sich für mich schwer nach einem klassischen INNER JOIN an. jede firma hat einen ländercode, der dann über die ländertabelle aufgelöst wird. oder hat nicht jede firma einen ländercode ?
Ilja
Hi,
ist den hier ein RIGHT JOIN notwendig ? das hört sich für mich schwer nach einem klassischen INNER JOIN an. jede firma hat einen ländercode, der dann über die ländertabelle aufgelöst wird. oder hat nicht jede firma einen ländercode ?
das habe ich auch gedacht und er hat einen Ländercode nur das der Ländercode nicht jede Firma hat. Also mal hat der Ländercode in er Firmen Tabelle es gibt auch NULL werte.
und denn ist es doch kein INNER JOIN denn gibt er mir doch nicht alle Zeilen zurück nur die, die NOT NULL sind
Gruß
Corinna
yo,
das habe ich auch gedacht und er hat einen Ländercode nur das der Ländercode nicht jede Firma hat. Also mal hat der Ländercode in er Firmen Tabelle es gibt auch NULL werte.
ok, dann musst du wahrlich einen OUTER JOIN machen, wenn der ländercode auch mal NULL werte enthält. kannst du nochmal beide abfragen hier auflisten, die du miteinander kombinieren wllst. aber ohne die ganze latte von spalten, die angezeigt werden sollen. ein SELECT * FROM .... reicht für diese zwecke vollkommen, um die abfragen zu kombinieren.
Ilja
ok, dann musst du wahrlich einen OUTER JOIN machen, wenn der ländercode auch mal NULL werte enthält. kannst du nochmal beide abfragen hier auflisten, die du miteinander kombinieren wllst. aber ohne die ganze latte von spalten, die angezeigt werden sollen. ein SELECT * FROM .... reicht für diese zwecke vollkommen, um die abfragen zu kombinieren.
Hi,
Das ist der eine
SELECT dbo_FIRMA_wichtig.*, dbo_LAND_wichtig.*
FROM dbo_LAND_wichtig RIGHT JOIN dbo_FIRMA_wichtig ON dbo_LAND_wichtig.ISOALPHA2 = dbo_FIRMA_wichtig.LKZ;
Hi,
Und das er andere
SELECT dbo_ANSPRECHPARTNER_wichtig.*, dbo_FIRMA_wichtig.*, dbo_MITARBEITER1_wichtig.*, dbo_FACHBEREICH_wichtig.*
FROM dbo_FACHBEREICH_wichtig INNER JOIN (dbo_MITARBEITER1_wichtig INNER JOIN (dbo_FIRMA_wichtig INNER JOIN dbo_ANSPRECHPARTNER_wichtig ON dbo_FIRMA_wichtig.FIRMAID = dbo_ANSPRECHPARTNER_wichtig.FIRMA_ID) ON (dbo_MITARBEITER1_wichtig.MITARBEITERID = dbo_FIRMA_wichtig.VERANTWORTLICHER) AND (dbo_MITARBEITER1_wichtig.MITARBEITERID = dbo_ANSPRECHPARTNER_wichtig.BETREUER)) ON dbo_FACHBEREICH_wichtig.FACHBEREICHNR = dbo_MITARBEITER1_wichtig.FACHBEREICHNR;
(ich habe es mit Access schnell zusammen geklickt sonst verwende ich den SQL Server)
Und es wäre schön wenn Sie zusammen finden würden ;-))
Gruß
Corinna
yo,
Und es wäre schön wenn Sie zusammen finden würden ;-))
nun wenn wir den OUTER JOIN mit einem INNER JOIN verbinden können, dann sollte der rest weniger probleme machen. geht denn folgende abfrage ?
SELECT *
FROM dbo_FIRMA_wichtig AS f
LEFT JOIN dbo_LAND_wichtig AS l ON l.ISOALPHA2 = f.LKZ
INNER JOIN dbo_ANSPRECHPARTNER_wichtig AS a ON f.FIRMAID = a.FIRMA_ID
Ilja
Guten Morgen!
nun wenn wir den OUTER JOIN mit einem INNER JOIN verbinden können, dann sollte der rest weniger probleme machen. geht denn folgende abfrage ?
SELECT *
FROM dbo_FIRMA_wichtig AS f
LEFT JOIN dbo_LAND_wichtig AS l ON l.ISOALPHA2 = f.LKZ
INNER JOIN dbo_ANSPRECHPARTNER_wichtig AS a ON f.FIRMAID = a.FIRMA_ID
in Access nicht aber ich kann das leider in nicht aufm SQL Server testen Syntaktisch würde ich sagen ja.
SELECT *
FROM (dbo_LAND_wichtig RIGHT JOIN dbo_FIRMA_wichtig ON dbo_LAND_wichtig.ISOALPHA2 = dbo_FIRMA_wichtig.LKZ) INNER JOIN dbo_ANSPRECHPARTNER_wichtig ON dbo_FIRMA_wichtig.FIRMAID = dbo_ANSPRECHPARTNER_wichtig.FIRMA_ID;
So ist das in Access aber das geht doch nie so aufm SQL Server, oder doch??
Gruß
Corinna
yo,
in Access nicht aber ich kann das leider in nicht aufm SQL Server testen Syntaktisch würde ich sagen ja.
syntaktisch sollte meine abfrage richtig sein, wenn ich nicht kleine flüchtigkeitsfehler gemacht habe. aber viel wichtiger als die syntax, ist doch die semantik. insofern wäre es schon von vorteil zu wissen, ob diese abfrage auch inhaltlich zu deinem gewünschten ergebnis führt. wenn ja, kann man die anderen tabellen mit INNER JOINS leicht hinzufügen. wenn nein, dann muss man noch mal genauer hinschauen, bzw. hoffentlich hat jemand anderes den entscheidenen tip.
So ist das in Access aber das geht doch nie so aufm SQL Server, oder doch??
wenn ich dich richtig verstanden habe, dann musst du das auf einem SQL Server ausführen, auf den du zur zeit keinen zugriff hast ? letztlich würde ich sagen, sollte die abfrage auch auf dem SQL Server laufen. aber um das genau zu wissen, hilft halt nur der zugriff auf diesen, das ausführen und valedieren der ergebnistabelle.
Ilja