2014-03-14 92 views
1

让说我有2个表象下面这样:左连接和右连接足够吗?

表:产品

------------- 
|PRODUCT | 
------------- 
|IPAD  | 
------------- 
|IPHONE  | 
------------- 

表:销售

----------------------------- 
SALES_PERSON|PRODUCT|IS_SOLD| 
----------------------------- 
ALICE  |IPAD | 1 | 
----------------------------- 
JOHN  |IPONE | 1 | 
----------------------------- 

这有可能使SQL语句产生结果像下面?

-------------------------------- 
SALES_PERSON| PRODUCT | IS_SOLD| 
-------------------------------- 
ALICE  | IPAD | 1  | 
-------------------------------- 
ALICE  | IPHONE | null | 
-------------------------------- 
JOHN  | IPAD | null | 
-------------------------------- 
JOHN  | IPHONE | 1  | 
-------------------------------- 

回答

2

你可以用连接做到这一点,但你需要多个连接。您需要在产品和销售人员之间创建一个交叉产品。左加入这个到sales_person表:

select pe.sales_person, p.product, sp.is_sold 
from product p cross join 
    (select distinct sales_person from sales) pe left outer join 
    sales_person sp 
    on sp.product = p.product and 
     sp.sales_person = pe.sales_person; 
+0

感谢戈登, 我刚刚发现了一个解决方案太: 选择sql1.product,sql1.sales_person,sql2.is_sold 从 ( \t的选择P 。产品,s.sales_person,从 \t产品p s.is_sold \t,销售小号 )SQL1 左外连接 ( \t选择p.product,s.sales_person,s.is_sold \t从 \t产品p \t留在p.product加入销售S = s.product )SQL2上 (sql1.product = sql2.product); – user3418090

+0

@ user3418090。 。 。如果'sales_person'出现在'sales_person'表中的多行中,您的解决方案将导致重复行。 –