Přidejte se tabulka dvakrát vždy dvě různé hodnoty pro stejné oblasti

hlasů
0

Mám záznam, který má dva lidé záznamy s ním spojené. Lid záznamy jsou prodejci (peoplecode = 20) a klienty (peoplecode = 1). Chci město prodejce i zákazníka. Myslel jsem, že to bude rovně vpřed, ale nedokážu dostat se do práce - mám žádné výsledky. V tabulce Folderpeople právě týká mé složky mým lidem.

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 ; 
Položena 07/11/2018 v 23:43
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

Problém je v tom jste se připojil ke stolu folderpeople pouze jednou, takže můžete nikdy dostat všechny řádky. Zkuste to:

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

Také bych použít vnější spojení jen v případě, že jste neměli jak prodejce a klienta pro každou složku.

Odpovězeno 08/11/2018 v 01:36
zdroj uživatelem

hlasů
0

Skočil jsem zbraň - Randyho odpověď dává výsledky - ale dal mi dvě řady pro každého. Ale mě to ukázal správným směrem. Když jsem v kombinaci Randyho roztoku s roztokem mdem7 to jsem našel řešení, které funguje.

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; 
Odpovězeno 09/11/2018 v 15:51
zdroj uživatelem

hlasů
0

Domnívám se, že stačí left joinů:

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 ; 

Získáte žádné řádky, protože fp.peoplecodenemůže být jak „1“ a „20“ ve stejné řadě.

To by mělo vyřešit problém, že nemáte žádné řádky. To ještě nemusí být struktura sadu výsledků, které chcete. Je-li tomu tak není, zeptejte se další otázky s příslušnými údaji vzorku a požadované výsledky.

Odpovězeno 08/11/2018 v 03:17
zdroj uživatelem

hlasů
0

Zkuste to, dejte mi vědět, jestli to funguje.

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; 
Odpovězeno 08/11/2018 v 00:08
zdroj uživatelem

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