基于值连接表

时间:2017-06-16 18:17:52

标签: sql

我很难在这两个表上执行连接功能。我已经简化了示例数据集,因为第一个表涉及其他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表记录'CURTAIN'应该保持关闭(无论Product_reference ref_type'MAN'是否存在)

有什么建议吗?

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

2 个答案:

答案 0 :(得分: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'的数据,而不是从结果集中删除所有其他行。

旁注,感谢您将查询和示例数据包含在您非常好的问题中。我们很感激。

答案 1 :(得分:0)

您可以在具有“MAN”

的不同产品上使用内部联接
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'