我在为 Oracle 编写 join 语句时遇到了一些问题。我想我想使用左连接,但我不是 100% 确定。
这是我的两张桌子
**VisibilityTable**
Industry
ProductID
Visibility
etc
**ItemTable**
ProductID
Other Info
etc
这就是问题所在。我有大约 15 个行业。每个行业都希望能够根据自己的喜好将产品(~15000)标记为公共或私有。当您想要查看设置为公共或私有的特定行业的产品时,我可以使用该查询。
我遇到的问题是在一个产品被标记为一个行业的公共或私有之后,它不再出现在它尚未标记的行业中。到目前为止,这是我的查询:
SELECT v.*, NVL(b.VISIBILITY,'Not Marked') Visibility
FROM ItemTable v
LEFT OUTER JOIN VisibilityTable b ON b.ProductID = v.ProductID
WHERE (
(v.STATUS LIKE 'Filter' or 'Filter' LIKE 'All') AND
(v.MODEL LIKE 'Filter' or 'Filter' LIKE 'All') AND
(v.DUTY LIKE 'Filter' or 'Filter' LIKE 'All') AND
(v.CERTIFICATION LIKE 'Filter' or 'Filter' LIKE 'All')
)
这可以让我获得标记为“未标记”、“私人”、“公共”的项目,但我无法让它撤回在所选行业中未标记的项目。
编辑:添加了完整的 where 子句。这是动态生成的,然后根据来自配置文件的值传入。
例如,ProductID 85322 已标记为 Private for Industry EPGBio,但当我选择 Industry EPGMethane 时,它不会显示为“未审核”。它显示为标记为私有。