Представьте запрос
SELECT Col_A FROM TABLE_A WHERE Col_A IN (SELECT Col_A FROM TABLE_B)
За исключением того, что в TABLE_B нет столбца Col_A; Он есть только у TABLE_A. Я пробовал это в Oracle 12, и я не уверен, как далеко это уходит в версиях, но похоже, что он возвращает действительный результат отображения всех данных Col_A из TABLE_A. Как разработчик, я ожидаю, что что-то подобное вызовет ошибку, поскольку внутренний запрос, так сказать, даже не обращается к TABLE_A снова. Может кто-нибудь объяснить, почему или где мы будем использовать ситуацию с запросом, подобную приведенной выше, потому что я почти чувствую, что это должна быть ошибка в системе.
SCOTT
попробуйтеselect sal from emp where sal in (select sal from dept)
, а затем изменитеsal
наcomm
(три раза), чтобы увидеть, что произойдет, когда в столбце будетNULL
. Или, если у вас нет доступа кSCOTT
, попробуйте его на любых двух таблицах, просто убедитесь, что столбец не существует во второй таблице. Кроме того, версия и контекст в данном случае не имеют значения. - person mathguy   schedule 23.02.2018Table_b.col_a
). Останавливает этот тип ошибок. - person Clockwork-Muse   schedule 23.02.2018