SQL tabellenübergreifende Abfrage

ToiToi

Lieutenant
Registriert
Sep. 2007
Beiträge
802
Moin Männers. Sitz hier grad auf der Arbeit an ner SQL-Abfrage und komme einfach nicht weiter. Hoffe ich könnt mir vllt. weiterhelfen.

Und zwar haben wir eine Datenbank mit den ganzen Geräten und deren ID-Nummern. Jetzt soll ich quasi ein Report über Excel machen. Die Abfrage schreibe ich deshalb über Microsoft Query.

So das Problem ist wie folgt:

In Tabelle 1 habe ich die ID-Nummer (ident_id) und eine "modify_by" Nummer. "modify_by" steht für den letzten Bearbeiter. Dieser steht wiederrum unter der Variable "name" in Tabelle 2 und die Zuordnung für "modify_by" ist in dieser Tabelle "users_id".
Jetzt habe ich bisher folgende Abfrage:

SELECT Tabelle1.ident_id, Tabelle2.name
FROM Tabelle1, Tabelle2
WHERE Tabelle1.modify_by = Tabelle2.users_id
ORDER BY Tabelle1.ident_id

Jetzt besteht nur das Problem, dass bei ID-Nummern die nicht bearbeitet wurden das Feld modify_by den Wert "0" hat und dieser logischerweise nicht in Tabelle 2 vorkommt. Aus diesem Grund werden mir diese ID-Nummern nachher nicht angezeigt, sondern nur die, bei denen auch ein Bearbeiter zugeordnet werden kann. Ich möchte aber alle angezeigt bekommen.

Hoffe es ist recht verständlich^^

Danke schonmal
 
kanst nich einfach machen:

SELECT Tabelle1.ident_id, Tabelle2.name
FROM Tabelle1, Tabelle2
WHERE (Tabelle1.modify_by = Tabelle2.users_id) OR Tabelle1.modify_by = 0
ORDER BY Tabelle1.ident_id
 
ja stimmt dass hab ich vergessen zu sagen.
wenn ich das mache listet er mir bei den Einträgen wo modify_by = 0 ist alle Bearbeiter auf also quasi so:

ID1____Bearbeiter1
ID1____Bearbeiter2
ID1____Bearbeiter3
ID2____Bearbeiter1

weißte was ich meine?
 
du meinst das was marlboro geschrieben hast?
Dann passiert das oben genannte^^
 
so vllt?

SELECT Tabelle1.ident_id, Tabelle2.name
FROM Tabelle1, Tabelle2
WHERE (Tabelle1.modify_by = Tabelle2.users_id) OR (Tabelle1.modify_by NOT IN (select users_id from Tabelle2))
ORDER BY Tabelle1.ident_id
 
Kannst du nicht in Tabelle2 einen Dummy User mit der ID 0 hinzufügen?
 
SELECT Tabelle1.ident_id, Tabelle2.name
FROM Tabelle1
LEFT JOIN Tabelle2
ON Tabelle1.modify_by = Tabelle2.users_id
ORDER BY Tabelle1.ident_id

So und nicht anders ;)
Das LEFT JOIN bewirkt das die Tabelle2 an die Tabelle1 gejoint wird, egal ob in Tabelle2 etwas passendes für Tabelle1 ist oder nicht, es wird also immer alles ausgegeben.
 
Ohh, das hatte ich übersehen.
Der Vorschlag von WingX scheint zumindest der einfachste Weg zu sein.
 
ja der vorschlag von winx ist leider nicht umzusetzten, da der admin dass nicht will :(
ich probiers jetzt mal den vorschlag von der deutschenmark^^
 
Nein, der Dummy-User ist absolut falsch, bereits der Wert "0" birgt schon Risiken und Probleme. Eigentlich müsste das eine Nullable Spalte mit Fremschlüsselbezug auf die Users Tabelle sein.
Aber leider wird von korrektem Datenbankdesign heute wenig gehalten. Stattdessen lieber 5 mal basteln als einmal richtig machen.

P.S.: Die Bemerkung ist leicht sarkastisch gemeint trifft aber den Kern der Wahrheit
 
dass kann gut sein...ich hab die datenbank aber "leider" nicht gemacht.
Ich würde die Idee von DeutscheMark gerne ausprobieren nur irgendwie ist der server grad off
 
1a...danke DeutscheMark...funst einwandfrei^^
beim nächsten Problem melde ich mich wieder
 
Zurück
Oben