2017-06-16 46 views
1

我在这两个表上做了一些连接功能的困难。我简化了示例数据集,因为第一个表中包含额外的where子句,但这似乎不成问题。根据值连接表

我会写查询加盟下面两个表:

select a.prod_code, a.prod_name, b.ref_value from Product_code a 
left join Product_reference b on a.prod_code = b.pref_code 
where a.prod_code <> 'CURTAIN' and b.ref_value = 'MAN' 

我现在面临的问题是,我想加入的表样的条件。即如果在Product_reference表中ref_type值是'MAN',我确实想加入它,否则不会。

例如,此查询在结果中不包含“Chair”,因为它在“Product_name”中没有可用的ref_type'MAN'。我所需要的仍然是在查询结果中显示它,只是没有从Product_reference表中加入值(假设ref_type'MAN'的值不存在),所以不要把它全部放在外面。

同时PRODUCT_NAME表记录“窗帘”应该离开(如果不考虑Product_reference ref_type“人”的存在与否)

任何建议?

Product_code  
prod_code prod_name 

A   Table 
B   Chair 
C   Window 
D   Door 
E   Curtain 


Product_reference  
pref_code ref_type ref_value 

A   MAN   x 
A   AUTO  y 
B   AUTO  z 
C   AUTO  z1 
C   MAN   x1 
D   AUTO  zxc 
E   AUTO  abc 
E   MAN   cba 
+0

这是否帮助?选择a.prod_code,a.prod_name,从PRODUCT_CODE一个 b.ref_value左连接Product_reference b on a.prod_code = b.pref_code 其中a.prod_name <>'CURTAIN'和b.ref_type ='MAN' – dkb

回答

1

移动b.ref_value = 'MAN'到连接谓词:

SELECT a.prod_code, a.prod_name, b.ref_value 
FROM Product_code a 
LEFT JOIN Product_reference b ON a.prod_code = b.pref_code AND b.ref_value = 'MAN' 
WHERE a.prod_code <> 'CURTAIN' 

这将完成你想要的东西,这是只有左侧的接合部从表B中的数据,其中b.ref_value = 'MAN',而不是从结果中删除所有其他行完全设置。

请注意,谢谢您将您的查询和示例数据包含在您的问题中。我们感谢它。

0

你可以使用内部连接上有“人”的独特产品

select 
    a.prod_code 
    , a.prod_name 
    , b.ref_value 
from Product_code a 
inner join (
    select distinct pref_code 
    from Product_reference 
    where ref_type = 'MAN') t2 on t2.pref_code = a.prod_code 
     and a.prod_code <> 'CURTAIN'