我很难在这两个表上执行连接功能。我已经简化了示例数据集,因为第一个表涉及其他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
答案 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'