愚蠢的提问时间。甲骨文 10g。
where 子句是否可能影响连接?
我有以下形式的查询:
select * from
(select product, product_name from products p
join product_serial ps on product.id = ps.id
join product_data pd on pd.product_value = to_number(p.product_value)) product_result
where product_name like '%prototype%';
显然,这是一个人为的例子。没有必要显示表格结构,因为它都是虚构的。不幸的是,我无法显示真正的表结构或查询。在这种情况下,p.product_value 是一个 VARCHAR2 字段,在某些行中存储了 ID 而不是文本。(是的,糟糕的设计——但我继承了一些东西,无法改变)
问题在于连接。如果我省略 where 子句,则查询有效并返回行。但是,如果我添加 where 子句,我会在 pd.product_value = to_number(p.product_value) 连接条件上收到“无效数字”错误。
显然,当连接 p.product_value 字段中包含非数字的行时,会发生“无效数字”错误。但是,我的问题是如何选择这些行?如果在没有外部 where 子句的情况下连接成功,那么外部 where 子句不应该只从连接结果中选择行吗?似乎正在发生的事情是 where 子句正在影响连接的行,尽管连接在内部查询中。
我的问题有意义吗?