Пункт Where, влияющий на присоединение.

Тупой вопрос времени. Оракул 10г.

Может ли предложение 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, в котором в некоторых строках хранится идентификатор, а не текст. (Да, плохой дизайн -, но что-то, что я унаследовал и не могу изменить)

Проблема в соединении. Если я пропущу предложение where, запрос будет работать, и строки будут возвращены. Однако, если я добавлю предложение where, я получаю сообщение об ошибке «недопустимый номер» в условии соединения pd.product_value = to_number(p.product_value).

Очевидно, что ошибка "invalid number" возникает, когда объединяются строки, содержащие не-цифры в поле p.product_value. Однако мой вопрос заключается в том, как выбираются эти строки? Если соединение завершается успешно без внешнего предложения where, не должно ли внешнее предложение where просто выбирать строки из результата соединения? Похоже, что происходит то, что предложение where влияет на то, какие строки соединяются, несмотря на то, что соединение находится во внутреннем запросе.

Имеет ли смысл мой вопрос?

5
задан Burhan Ali 11 April 2012 в 12:04
поделиться