Вопрос

Что означает предупреждение?

Чем второй пример хуже первого?

SELECT   product_id, prod.name name, sample_id
  FROM   lims.sample JOIN lims.product prod USING (product_id)

против.

SELECT   product_id, prod.name name, sample_id
  FROM   (SELECT   sample_id, product_id FROM lims.sample)
         JOIN lims.product prod
/* ADVICE: [131]  This item has not been declared, or it refers to a label */
            USING (product_id)

/* ADVICE:
ADVICE SUMMARY

Count  Recommendation
-----  --------------
    1  [131]  This item has not been declared, or it refers to a label
                  The Oracle equivalent error messages are  PLS-00320 and
                  PLS-0321.
*/

К вашему сведению:Оба запроса выполняются нормально и возвращают одинаковые результаты.

Это было полезно?

Решение

Откладываем в таблицы объем данных, индексов и собранной статистики;в общем, невложенные подзапросы должен превосходить вложенные подзапросы.

Другие советы

Мое предположение:Похоже, что TOAD не анализирует запрос так, как это делает Oracle.

В первом запросе, возможно, TOAD проверяет определения таблиц для lims.sample и lims.product и находит столбец «product_id» в обоих, так что все в порядке.

Во втором запросе TOAD не может проверить определение таблицы для первой части соединения, поскольку это вложенный запрос;так что, возможно, он сдается и дает вам этот совет (именно поэтому в совете написано «...или это относится к метке», что, вероятно, является отговоркой).

В данном случае я бы проигнорировал совет, тем более что он работает нормально и возвращает те же результаты.

Просто догадайтесь, но во втором запросе ваш подзапрос не назван - попробуйте дать ему псевдоним;например:

SELECT   product_id, prod.name name, sample_id
  FROM   (SELECT   sample_id, product_id FROM lims.sample) samp
         JOIN lims.product prod
            USING (product_id)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top