愚蠢的问题时间。 Oracle 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子句正在影响哪些行被连接,尽管连接处于内部查询中。
我的问题有意义吗?
你可以给它一点点'to_char(pd.product_value)= p.product_value'。 – briantyler 2012-04-10 15:27:34