2013-07-05 54 views
0

我是新来的这个sql世界。在我是一位开发人员,他在SQL &简单连接方面的知识有限。我在编写sql join时出现了一对多关系的问题。这里是我的问题说 -Oracle sql一对多加入

例如,如果我有一个VendorsList表:

id Name   address 
1 sales  Japan 
2 marketing US 

而一个VendorContacts表:

id vendorid  vendorempname 
1 1    Tom 
2 1    Bill 
3 2    Jessy 
4 1    Rachel 
5 2    Rob 

现在我想以后参加的是:

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 

任何人都可以帮助编写此连接请?

回答

2

这应该做的工作

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 
0
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; 
0

请有看看这个:

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 

请尝试这一点,并会得到你想要的数据。

0

请尝试以下查询。它给出了您正在寻找的确切结果,除了代号名称的顺序。

  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 
      ;