Doppelter Join?

JoergBoerg

Grünschnabel
hallo,

es geht um ein sql-problem:
ich habe eine tabelle, in der 2 user (mit unterschiedlichen funktionen) referenziert sind.
nun will ich eine sql-abfrage machen, die mir beide user zu einem post liefert.
wie mache ich das?

ein normaler join liefert natürlich dann immer 2 einträge zurück, in denen jeweils ein user beide zellen inne hat! :(
also etwa:

id user1 user2
1 1 1
1 2 2


was ich bräuchte wäre also eine überkreuzung der daten:

id user1 user2
1 1 1
1 1 2
1 2 1
1 2 2

,denn dann könnte ich ganz einfach mit einer where klausel die passende zeile slektieren...

ich arbeite übrigens mit mssql 2000...

danke
Jörg
 
Servus!

Für sowas gibt es unter Access die Kreuztabellenabfrage ... Schlüsselwort "Transform" ...schau mal ob das bei MSSQL Server auch funktioniert ...

Gruss Tom
 
Hallo Tom,

das Schlüsselwort TRANSFORM gibt in es MSSQL schon mal nicht und wenn ich in der Hilfe nach Transform suche bekomme ich so grob geschätzt 5 Millionen Infos zum DTS! ;)
Ich habe da jetz mal lange gesucht, aber über den Weg finde ich leider nichts :(

Da ich mir aber nicht vorstellen kann, daß Access eine (sinnvolle) Funktionalität hat, die man im MSSQL nicht abbilden kann...

Gruß,
Jörg
 
Servus!

Da ich mir aber nicht vorstellen kann, daß Access eine (sinnvolle) Funktionalität hat, die man im MSSQL nicht abbilden kann...

...das hat ja auch niemand behauptet ...

...wenn du mal ein paar anständige Beispiel Tabellen angibst und mir genau beschreibst, welche Erbenismenge daraus resultieren soll kann ich dir vielleicht helfen ... :)

id user1 user2
1 1 1
1 2 2

was ich bräuchte wäre also eine überkreuzung der daten:

id user1 user2
1 1 1
1 1 2
1 2 1
1 2 2

...reicht nicht ganz ... ;-)

Gruss Tom
 
ok, ich mache das Beispiel mal etwas ausführlicher: ;)

zwei tabellen:
Code:
ticket (id, name, melder, dispatcher, bearbeiter)
user (id, username, mail)

melder, dispatcher und bearbeiter sind referenzen auf tabelle user.
mein select sieht dann z.b. so aus:
Code:
select
     ticket.id as 'ticket_id',
     ticket.name as 'titel',
     user.username as 'melder',
     user.username as 'dispatcher',
from ticket
     join user on user.id in (ticket.melder, ticket.dispatcher)

So, als ergebnis bekomme ich dann:
Code:
id     name     melder     dispatcher
1      test     admin      admin          
1      test     dummy      dummy          
1      test     dau        dau c

Dort kann ich dann natürlich nicht hergehen und herausfinden, welcher user denn nun melder oder sonst was ist.
ich bräuchte daher eine art über-kreuz-verknüpfung.
logischer wiese habe ich den cross join schon getestet - geht auch nicht
ich will also:
Code:
id     name     melder     dispatcher
1      test     admin      admin
1      test     admin      dummy
1      test     admin      dau
1      test     dummy      admin
1      test     dummy      dummy
1      test     dummy      dau
1      test     dau        admin
1      test     dau        dummy
1      test     dau        dau
Dort kann ich dann über weitere where-klauseln genau die zeile rauspicken, die ich haben will.

So, ich hoffe das war jetzt ausführlich genug :)

Gruß,
Jörg
 
Noch mal servus!

Könntest du mir auch ein wenig "Testcontent" geben, mit denen ich die Tabellen zum probieren füllen könnte?

im Moment habe ich die Tabelle

ticket:

tick_id|name|melder|dispatcher|bearbeiter
....
user:

usr_id|username|mail
....

brauche jetzt wie gesagt zu den "...." Testwerte zu denen die Ergebnismenge:

code:--------------------------------------------------------------------------------
id name melder dispatcher
1 test admin admin
1 test admin dummy
1 test admin dau
1 test dummy admin
1 test dummy dummy
1 test dummy dau
1 test dau admin
1 test dau dummy
1 test dau dau
--------------------------------------------------------------------------------

Passt...

Gruss Tom
 
hallo tom

entschuldige, aber ich kann dir nicht so ganz folgen:
ich meine was da noch drin stehr ist doch egal.
mach doch einfach die 3 user und nimm für ticket zwei fälle, in denen melder, dispatcher und bearbeiter nicht identisch sind...

ich kann dir jetzt hier keine besseren testwerte geben, da ich die db gerade auch erst aufbaue, d.h., da steht momentan auch nur "test1" und "grrrrr" drin! :)

vielleicht reden wir aber auch aneinander vorbei

bis gleich ;)
jörg
 
Servus!

Irgendwie hab ich das gestern verpeilt ... sorry ...
bekomms leider nicht gereiht (zumindest im Moment nicht) ...
werde aber noch ein wenig weiterprobieren ...

Gruss Tom
 
Hi Tom,

ich habe gestern auch noch ein bißchen rumgebastelt, mußte dann aber einen Workaround programmieren, damit das zumindest eingeschränkt erstmal läuft.
Ich sortiere die ID's und die username jetzt in der anwendung (pfui), was natürlich den großen nachteil hat, daß ich z.b. nicht nach melder sortieren kann :(

wenn du eine lösung findest ist dir eine erwähnung im quelltext sicher! :)

gruß
Jörg
 
Gelöst!

Hallo Tom,

man bin ich dämlich! :rolleyes:
Die Lösung war so einfach.
Logischer weise kann man nicht zwei mal auf die selbe Tabelle zugreifen, da diese dann ja den selben Namen hat, wenn man aber verschiedene aliase setzt... :)

select t.id, u1.id, u2.id
from ticket as t left outer join user as u1 on t.melder=u1.id left outer join user as u2 on t.melder=u2.id

Trotzdem danke für deine Mühe!
Gruß
Jörg
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück