什么是警告的意思吗?

为什么是第二示例比第一差?

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

VS

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检查lims.sample和lims.product表定义,并且发现在所述列“PRODUCT_ID”,所以它的细

在第二个查询,TOAD不能检查表定义为的加入是因为它是一个嵌套查询的第一部分;因此,也许它给了,给你这个建议(这也是为什么建议说:“......或者它是指一个标签”,这可能是一个copout)。

我会在这种情况下忽略该建议,特别是因为它运行良好,并返回相同的结果。

只是一个猜测,但在第二个查询你的子查询未命名 - 尝试给它的别名;例如:

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