Vinnaren i pepparkakshustävlingen!
2015-09-08, 16:03
  #1
Medlem
Biggless avatar
Hej har en fråga angående LEFT JOIN. Jag försöker matcha 3 tabeller som jag har. User och Usersource med task tabellen.

I task tabellen finns en column som heter task_handler som innehåller värden som ska matchas mot användarna i Users. Problemet är bara att de finns en mellan tabell som innehåller ett värde från Users och en Tasks så man måste gå via denna.

Så här har jag testat hittils och jag har även testat med 3 Innerjoins utan att få det att fungera.



Kod:
select dbo.gr_task.task_number,dbo.gr_task.task_namedbo.gr_task.task_descriptiondbo.gr_task.task_submitdatedbo.gr_task.task_submitter,Submitter.user_name AS SubmitterHa.usersource_idtask_handler



FROM dbo
.gr_task  


left join dbo
.gr_user AS Submitter ON dbo.gr_task.task_submitter=Submitter.user_id
left join 
(Select usersource_id from dbo.gr_usersource) AS Ha ON dbo.gr_task.task_handler=HA.usersource_id

WHERE

dbo
.gr_task.task_parent='8a84a98a2afbb127012b1eb031a9029f'  
and dbo.gr_task.task_closedate IS NULL 


Hoppas på hjälp tack.
Citera
2015-09-08, 20:37
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Hej har en fråga angående LEFT JOIN. Jag försöker matcha 3 tabeller som jag har. User och Usersource med task tabellen.

I task tabellen finns en column som heter task_handler som innehåller värden som ska matchas mot användarna i Users. Problemet är bara att de finns en mellan tabell som innehåller ett värde från Users och en Tasks så man måste gå via denna.

Så här har jag testat hittils och jag har även testat med 3 Innerjoins utan att få det att fungera.



Kod:
select dbo.gr_task.task_number,dbo.gr_task.task_namedbo.gr_task.task_descriptiondbo.gr_task.task_submitdatedbo.gr_task.task_submitter,Submitter.user_name AS SubmitterHa.usersource_idtask_handler



FROM dbo
.gr_task  


left join dbo
.gr_user AS Submitter ON dbo.gr_task.task_submitter=Submitter.user_id
left join 
(Select usersource_id from dbo.gr_usersource) AS Ha ON dbo.gr_task.task_handler=HA.usersource_id

WHERE

dbo
.gr_task.task_parent='8a84a98a2afbb127012b1eb031a9029f'  
and dbo.gr_task.task_closedate IS NULL 


Hoppas på hjälp tack.
Men vad är det som inte funkar då?

I de fall du har fler än en användare per task i kopplingstabellen kommer du få en rad per sådan, det kommer du inte kunna komma undan oavsett om du använder left outer join eller inner join.

Kan du inte bara köra denna?

Kod:
select dbo.gr_task.task_number,dbo.gr_task.task_namedbo.gr_task.task_descriptiondbo.gr_task.task_submitdatedbo.gr_task.task_submitter,Submitter.user_name AS SubmitterHa.usersource_idtask_handler



FROM dbo
.gr_task  
inner join   dbo
.gr_usersource HA ON dbo.gr_task.task_handler=HA.usersource_id

inner join dbo
.gr_user AS Submitter ON HA.usersource_id=Submitter.user_id


WHERE

dbo
.gr_task.task_parent='8a84a98a2afbb127012b1eb031a9029f'  
and dbo.gr_task.task_closedate IS NULL 

Där tror jag jag fick med mig dina illa namngivna tabeller och attribut, prova den.
Citera
2015-09-09, 08:39
  #3
Medlem
Biggless avatar
Hej.

Var nog lite oklar då jag förklara så ska försöka lite bättre.


dbo.gr_usersource tabellen har två fält usersource_id och usersource_user

Där usersource_id är ett matachade nummer i tabellen dbo.gr_user och usersource_user matchar en rad i tabellen dbo.gr_task som heter Handler.



I tabellen dbo.gr_user så finns det också en column som heter user_name som jag skulle vilja ha istället för värdet som finns i tabellen dbo.gr_task så att ett task faktiskt får en Handler som har ett namn istället för värdet.


Så min fråga är väl egentligen hur kan jag tillämpa denna raden

Kod:
left join (Select usersource_id from dbo.gr_usersource) AS Ha ON dbo.gr_task.task_handler=HA.usersource_id 


Så att den gör som jag vill och tar fram de.
Citera
2015-09-09, 09:22
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Hej.

Var nog lite oklar då jag förklara så ska försöka lite bättre.


dbo.gr_usersource tabellen har två fält usersource_id och usersource_user

Där usersource_id är ett matachade nummer i tabellen dbo.gr_user och usersource_user matchar en rad i tabellen dbo.gr_task som heter Handler.



I tabellen dbo.gr_user så finns det också en column som heter user_name som jag skulle vilja ha istället för värdet som finns i tabellen dbo.gr_task så att ett task faktiskt får en Handler som har ett namn istället för värdet.


Så min fråga är väl egentligen hur kan jag tillämpa denna raden

Kod:
left join (Select usersource_id from dbo.gr_usersource) AS Ha ON dbo.gr_task.task_handler=HA.usersource_id 


Så att den gör som jag vill och tar fram de.
Provade du min sql? Den borde get dig ala tabeller länkade så du kan få tag på username.
Citera
2015-09-09, 09:48
  #5
Medlem
Biggless avatar
Citat:
Ursprungligen postat av Proton
Provade du min sql? Den borde get dig ala tabeller länkade så du kan få tag på username.


Hej

Japp jag testade och query retunerade ingenting. Problemet var nog att jag tog med en rad som inte behövdes som handlar om Submitter som är ett annat fält


Databasen jag kollar på är dåligt designad där Submitter columnen går direkt till user tabellen. Utan att behöva gå via usersource tabellen för att få ut username.

Så denna join är för submitter

Kod:
left join dbo.gr_user AS Submitter ON dbo.gr_task.task_submitter=Submitter.user_id 

Men Handler går via den här usersource tabellen


Så här ser själva problemet ut för bara Handler

Kod:
select dbo.gr_task.task_number,dbo.gr_task.task_namedbo.gr_task.task_description



FROM dbo
.gr_task  
left join dbo
.gr_user AS Handler ON 
dbo
.gr_usersource.usersource_user=Handler.user_id AND dbo.gr_task.task_handler=dbo.gr.usersource.usersource.id 

Mitt senaste försök ger dock

The multi-part identifier "dbo.gr_usersource.usersource_user" could not be bound.

Så tror ej det är rätt
Citera
2015-09-09, 12:49
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Hej

Japp jag testade och query retunerade ingenting. Problemet var nog att jag tog med en rad som inte behövdes som handlar om Submitter som är ett annat fält


Databasen jag kollar på är dåligt designad där Submitter columnen går direkt till user tabellen. Utan att behöva gå via usersource tabellen för att få ut username.

Så denna join är för submitter

Kod:
left join dbo.gr_user AS Submitter ON dbo.gr_task.task_submitter=Submitter.user_id 

Men Handler går via den här usersource tabellen


Så här ser själva problemet ut för bara Handler

Kod:
select dbo.gr_task.task_number,dbo.gr_task.task_namedbo.gr_task.task_description



FROM dbo
.gr_task  
left join dbo
.gr_user AS Handler ON 
dbo
.gr_usersource.usersource_user=Handler.user_id AND dbo.gr_task.task_handler=dbo.gr.usersource.usersource.id 

Mitt senaste försök ger dock

The multi-part identifier "dbo.gr_usersource.usersource_user" could not be bound.

Så tror ej det är rätt
Felmeddelandet tyder på att du skriver in fel namn på kolumnen, alternativt använder ett alias som inte finns.

Kan du inte presentera dina tabeller här så man ser vad du försöker koppla ihop egentligen?

Den fråga som jag föreslog, att den inte returnerade nåt tyder ju på att de idn du försöker använda inte går att matcha ihop.

Finns alla idn på plats i de olika tabellerna?
Citera
2015-09-09, 13:32
  #7
Medlem
Biggless avatar
Hej

Lyckades efter lite bök och hjälp lösa de genom att göra såhär.


Kod:
INNER JOIN dbo.gr_usersource us
    ON us
.usersource_id t.task_handler

INNER JOIN dbo
.gr_user u
    ON u
.user_id us.usersource_user 


Tack för all hjälp
Citera
2015-09-09, 13:48
  #8
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Hej

Lyckades efter lite bök och hjälp lösa de genom att göra såhär.


Kod:
INNER JOIN dbo.gr_usersource us
    ON us
.usersource_id t.task_handler

INNER JOIN dbo
.gr_user u
    ON u
.user_id us.usersource_user 


Tack för all hjälp
Ser inte riktigt den strukturella skillnaden mellan den där ochden inner join jag la fram, men bra att det ordnade sig.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback