Join-Tabelle zweimal mit jeweils zwei verschiedenen Werten für gleiches Feld

stimmen
0

Ich habe einen Datensatz, der zwei Menschen Aufzeichnungen im Zusammenhang mit ihm hat. Die Leute Aufzeichnungen sind Verkäufer (People = 20) und Kunden (People = 1). Ich will die Stadt sowohl dem Verkäufer und dem Kunden. Ich dachte, es würde einfach sein, aber kann nicht scheinen, um es zu arbeiten - ich habe keine Ergebnisse erhalten. Die Folderpeople Tabelle bezieht sich nur meine Ordner auf meine Leute.

select f.folderid, f.foldername, fp.peoplecode, 
p.addrcity as clientcity, p2.addrcity as sellercity 
from folder  f
join folderpeople fp on fp.folderid = f.folderid 
join people p on fp.peopleid = p.peopleid and fp.peoplecode = 1 
join people p2 on fp.peopleid = p2.peopleid and fp.peoplecode = 20 ; 
Veröffentlicht am 07/11/2018 um 23:43
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
1

Das Problem ist, dass Sie auf die folderpeople Tabelle verknüpfen nur einmal, so dass Sie nie irgendwelche Reihen bekommen. Versuche dies:

select f.folderid, f.foldername, fp.peoplecode, 
p.addrcity as clientcity, p2.addrcity as sellercity 
from folder  f 
join folderpeople fp1 on fp1.folderid = f.folderid 
join people p on fp1.peopleid = p.peopleid and fp1.peoplecode = 1 
join folderpeople fp2 on fp2.folderid = f.folderid 
join people p2 on fp2.peopleid = p2.peopleid and fp2.peoplecode = 20

Außerdem würde ich äußere nur für den Fall verbindet Sie hatte nicht sowohl einen Verkäufer und einen Client für jeden Ordner.

Beantwortet am 08/11/2018 um 01:36
quelle vom benutzer

stimmen
0

Ich sprang die Pistole - Randy Antwort gab Ergebnisse - aber gab mir zwei Reihen für jeden etwas dabei. Aber es wies mich in die richtige Richtung. Als ich Randys Lösung mit mdem7-Lösung kombiniert, fand ich eine Lösung, die funktioniert.

with sellers as (select fp.folderid, p.peopleid, fp.peoplecode, p.addrcity, 
     p.addrpostal from folderpeople fp , people p where fp.peopleid = p.peopleid and 
     fp.peoplecode = 20), 
clients as 
     (select fp2.folderid, p2.peopleid, fp2.peoplecode, p2.addrcity, p2.addrprovince, 
     p2.addrpostal, p2.namelast, p2.namefirst from folderpeople fp2, people p2  where 
     fp2.peopleid = p2.peopleid and fp2.peoplecode = 1)
select c.namelast as ClientLast, c.namefirst as ClientFirst, f.issuedate, 
     c.addrcity as "Client City", s.addrcity as "Seller City"
     from folder  f
        left join sellers s on f.folderid = s.folderid  
        left join clients c on f.folderid = c.folderid; 
Beantwortet am 09/11/2018 um 15:51
quelle vom benutzer

stimmen
0

Ich vermute , dass müssen Sie einfach left joins:

select f.folderid, f.foldername, fp.peoplecode, 
       p.addrcity as clientcity, p2.addrcity as sellercity 
from folder f join
     folderpeople fp 
     on fp.folderid = f.folderid left join
     people p
     on fp.peopleid = p.peopleid and
        fp.peoplecode = 1 left join
     people p2
     on fp.peopleid = p2.peopleid and fp.peoplecode = 20 ; 

Sie erhalten keine Zeilen , weil fp.peoplecodenicht beide „1“ und „20“ in derselben Zeile sein.

Dies sollte das Problem beheben , dass Sie keine Zeilen haben. Es kann immer noch nicht die Struktur der Ergebnismenge, die Sie wollen. Ist dies nicht der Fall ist, stellen eine weitere Frage mit entsprechenden Probendaten und die gewünschten Ergebnisse.

Beantwortet am 08/11/2018 um 03:17
quelle vom benutzer

stimmen
0

Versuchen Sie, diese lassen Sie mich wissen, ob das funktioniert.

with sellers as
  (select peopleid, addrcity from people where peoplecode = 20),
clients as 
  (select peopleid, addrcity from people where peoplecode = 1)
select f.folderid, f.foldername, fp.peoplecode, 
       c.addrcity as clientcity, s.addrcity as sellercity 
 from folder  f
 join folderpeople fp on fp.folderid = f.folderid 
 join sellers s on fp.peopleid = s.peopleid 
 join clients c on fp.peopleid = c.peopleid; 
Beantwortet am 08/11/2018 um 00:08
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more