SQL中的相关vs非相关子查询

时间:2014-03-25 02:26:20

标签: sql subquery correlated-subquery

我正在使用SQL中的相关和非相关子查询,我试图在两种类型的查询中获得相同的结果。我的问题在于我的非相关子查询。查询运行但不返回任何结果。我的相关子查询确实会返回结果,就像它应该的那样。我需要帮助试图弄清楚我的简单非相关子查询是否写得不正确。任何帮助是极大的赞赏。我的查询如下:

- 非相关子查询

SELECT *
FROM hr.bc_products p
WHERE p.sku NOT IN (SELECT ol.sku FROM hr.bc_orderlines ol);

- 相关子查询

SELECT * 
FROM hr.bc_products p
WHERE NOT EXISTS (SELECT ol.sku FROM hr.bc_orderlines ol WHERE ol.sku = p.sku);

1 个答案:

答案 0 :(得分:0)

我终于找到了问题所在。在查看每个查询的结果后,我意识到空值正在影响结果。我通过排除空值来更新我的非相关子查询。我更新的非相关子查询有效,如下所示:

- 非相关子查询

SELECT *
FROM hr.bc_products p
WHERE p.sku NOT IN (SELECT ol.sku FROM hr.bc_orderlines ol WHERE ol.sku IS NOT NULL);

希望这将有助于某人在将来避免这个问题。

相关问题