Reputation: 199
I'm new to this sql world. After I'm a developer with limited knowledge in SQL & simple joins. I have an issue in writing sql join for one-to-many relationship. Here's my problem say -
For instance if I have a VendorsList table with:
id Name address
1 sales Japan
2 marketing US
And a VendorContacts table with:
id vendorid vendorempname
1 1 Tom
2 1 Bill
3 2 Jessy
4 1 Rachel
5 2 Rob
Now what I want after join is :
vendor_id Name address vendorempname
1 Sales Japan Tom
1 Sales Japan Bill
1 Sales Japan Rachel
2 Marketing US Jessy
2 Marketing US Rob
Can any one help in writing join for this please?
Upvotes: 1
Views: 7471
Reputation: 9904
Try below query. It gives the exact results you are looking for except the order of the reps name..
WITH VENDORLIST AS
(SELECT '1' ID, 'sales' Name, 'Japan' address FROM DUAL
UNION
SELECT '2' ID, 'marketing' Name, 'US' address FROM DUAL),
VENDORCONTACTS AS
(
SELECT '1' ID, '1' vendorid, 'Tom' vendorempname FROM DUAL
UNION
SELECT '2' ID, '1' vendorid, 'Bill' vendorempname FROM DUAL
UNION
SELECT '3' ID, '2' vendorid, 'Jessy' vendorempname FROM DUAL
UNION
SELECT '4' ID, '1' vendorid, 'Rachel' vendorempname FROM DUAL
UNION
SELECT '5' ID, '2' vendorid, 'Rob' vendorempname FROM DUAL
)
SELECT VENDORID, NAME, ADDRESS, vendorempname FROM VENDORLIST, VENDORCONTACTS
WHERE VENDORCONTACTS.vendorid = VENDORLIST.ID
ORDER BY VENDORID, NAME, ADDRESS, vendorempname
;
Upvotes: 0
Reputation: 716
Please have look this:
Select vl.vendorId,vl.name,vl.address,vc.vendorempname
from vendorlist as vl
right join VendorContacts as vc
on vl.vendorId = vc.vendorId
order by vc.vendorId asc
please try this and will get data that you want.
Upvotes: 0
Reputation: 2896
SELECT b.vendor_id, a.Name, a.address, b.vendorempname
FROM VendorList a, VendorContact b
WHERE a.id = b.vendor_id
ORDER BY b.vendor_id;
Upvotes: 0
Reputation: 4041
This should do the work
Select v.vendor_id, v.name, v.address, vc.vendorempname
from VendorContacts vc
join VendorList v
on v.id = vc.vendor_id
order by vc.vendor_id
Upvotes: 3