Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SQL Inner Join

Empfohlene Antworten

Veröffentlicht

Guten Morgen die Herren,

vielleicht könnte mir mal wieder jemand bei einem SQL-Problem helfen.

Ich habe folgende SQL-Anweisung:

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, max( dsl_data.emailnummer ) AS mailnummer,

dsl_treatment.action , dsl_errorcodes.description

FROM dsl_data

INNER JOIN dsl_treatment ON ( dsl_data.auftragsnummer = dsl_treatment.auftragsnummer )

INNER JOIN dsl_errorcodes ON ( dsl_data.errorcode = dsl_errorcodes.code )

GROUP BY dsl_data-auftragsnummer

ORDER BY dsl_treatment.date DESC

Ziel soll es sein, die Auftragsnummer, Nachname, Vorname usw und auch eine Aktionsnummer, und zwar die des letzten Eintrages in der Tabelle dsl_treatment zu der übergebenen Auftragsnummer zu ermitteln.

Was er nun aber tut, ist mir die erste Aktionsnummer für die jeweilige Auftragsnummer zu übermitteln, die er findet.

Ich denke, mal dass da wohl irgendwie die Abfrage nicht stimmt, aber was ist da falsch bitte?

Vielen Dank.

morgen :)

also ich hab das gerad mal nachgestellt, ohne das group by funktioniert es bei mir wie gewuenscht.

was mich noch interessieren wuerde, waer warum du dir 2mal die dsl_errorcodes.description anzeigen laesst?

Upps das eine dsl_errorcodes war einmal zuviel. Allerdings wenn ich das Group By rausnehme, kommt eine Fehlermeldung, weil ich die Max Funktion in der eMailnummer drin habe. Und da brauch ich wiederum die höchste.

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, Max(dsl_data.emailnummer) AS [mailnummer], dsl_treatment.action

FROM (dsl_data INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.code) INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer

GROUP BY dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.action, dsl_treatment.date

ORDER BY dsl_treatment.date DESC;

ist zwar nicht schoen, aber geht :)

Leider nicht ganz, das bringt alle Datensätze raus untereinander. Sorry. :(

hmm, kannst du dann nochmal dein ziel etwas genauer erlaeutern?ich habs naemlich so verstanden :beagolisc

Also, ich habe drei Tabellen miteinander verknüpft. In der DSL-Data stehen Datensätze, wie z.B. eine eMail-Nummer und ein Fehlercode. Ich möchte nun aus der DSL-Data den höchsten eMail-Nummer Eintrag haben und den Fehlercode. Das geht ja soweit, das mit den Fehlercodes klappt. Nun gibt es auch ein Aktionsfeld in der Tabelle dsl_treatment, die auch die Auftragsnummer enthält. Hieraus möchte ich den aktuellsten, also von der Zeit her den letzten Datensatz, damit ich die letzte Aktion mit diesem Auftrag anzeigen kann.

Also auftragsnummer, höchtste eMailnummer aus dsl_data, fehlercode aus dsl_errorcodes und letzte Eintragung aus dsl_treatment unter dieser auftragsnummer.

also werden die auftragsnummern in der data mehrmals verwendet und durch die emailnummer kriegst du die reihenfolge raus?das problem ist aber das in der treatment nur die auftragsnummer steht und man keine verknüpfung zur emailnummer hat, ist das gewollt ? :)

so ich mach erstmal mittag, wir kriegen das aber noch hin :D

So ist das korrekt wie du es sagst und so ist es auch gewollt oder muss so sein, weil so angeliefert wird *grr* leider. Auftragsnummer ist in der Tabelle dsl_data mehrmals mit mehreren eMailnummern also 1,2,3 bspw. und auftragsnummer ist auch in der tabelle dsl_treatment mehrmals mit den aktionen zum Auftrag also nummer und aktion 1 oder 2 oder 3 bspw. mit einem zusätzlichen Timestamp. Nehmen wir nun folgendes an.

Wir haben die auftragsnummer 127112, an die wurden die emails 2 und 3 verschickt. und die hat die aktionen 1, 2, 3, und 4, wovon die Aktion 2 die jüngste ist, weil grade getätigt.

Mein ergebnis soll nun sein:

Auftragsnummer 127112 + eMail-Nr 3 + Aktionsnummer 2

Hoffe nun ist es verständlich.

aber es gibt doch zwischen der treatment und der data nur ne verknüpfung über die auftragsnummer, woher soll er dann wissen welche email welcher aktion zugeordnet ist? wenn man die abfrage so macht, dann gibt er einfach alles raus, weil ja die mailnummer zu jeder aktion gehoeren kann

Die eMail-Nummer gehört ja auch zu keiner der Aktionen, die ist davon unabhängig. Ich brauch sie aber für das Ergebnis trotzdem, und wie ich das in 2 Abfragen packe, erst eMail-Nummer dann Aktion, dabei haperts bei mir irgendwie.

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, Max(dsl_data.emailnummer) AS [mailnummer], dsl_treatment.action, Max(dsl_treatment.date) AS [sortdate]

FROM (dsl_data INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.code) INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer

GROUP BY dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.action

ORDER BY Max(dsl_treatment.date) DESC;

und so ? :)

invalid use of GROUP-Function und zwar der Gruppenfunktion Max bei ORDER BY MAX(dsl_treatment.date)

:(

Aber danke trotzdem für deine Geduld

kein problem, bin eh gerad an der arbeit und hab ab und zu nix zu tun :)

also ich nur ne loesung ueber die max funktion beim order by, was hast fuern sql server, oder ist das access?

ich probier mal weiter wenn ich zu hause bin,so gegen 17uhr

hm, bis jetzt nix neues :/

das problem besteht ja darin das du es 2mal sortieren willst, einmal nach der mailnummer und einmal nach datum, aber ich bleib dran, bin selbst net so der sqler :)

manchmal sieht man echt die einfachsten sachen nicht :cool:

wie waers mit:

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.emailnummer, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.aktion, dsl_treatment.datum

FROM (dsl_data INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer) INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.errorcode

ORDER BY dsl_data.emailnummer DESC , dsl_treatment.datum DESC;

also so stimmt das schonmal mit der sortierung, jetzt fehlt noch das mit der letzten aktionsnummer, na mal schaun :)

ps.: noch wegen spam oder so, ich haette das gern noch in den vorherigen post reingeschrieben, aber irgendwie konnte ich den nicht mehr aendern, najo :)

SELECT dsl_data.auftragsnummer, First(dsl_data.nachname) AS ErsterWertvonnachname, First(dsl_data.vorname) AS ErsterWertvonvorname, First(dsl_data.emailnummer) AS ErsterWertvonemailnummer, First(dsl_data.errorcode) AS ErsterWertvonerrorcode, First(dsl_errorcodes.description) AS ErsterWertvondescription, Last(dsl_treatment.aktion) AS LetzterWertvonaktion, Last(dsl_treatment.datum) AS LetzterWertvondatum

FROM (dsl_data INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer) INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.errorcode

GROUP BY dsl_data.auftragsnummer

HAVING (((dsl_data.auftragsnummer)="gewuenschte auftragsnummer hier einfuegen :)"))

ORDER BY Last(dsl_treatment.datum) DESC , Max(dsl_data.emailnummer) DESC;

jetzt aber wirklich, musst es halt noch ein bisschen huebscher machen

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.