当一行数据具有特定值时,如何排除多行数据集? SQL,ORACLE

时间:2014-11-21 15:13:23

标签: sql oracle

我希望我没有错过已发布的有助于我的答案。如果我这样做,请原谅我  让我们假设得到以下查询结果,我有内部将Item表连接到Item值的Pricing表。 我当前的查询返回类似于此的内容:

Item______Price
Item1_____Price1  
Item1_____Price2  
Item1_____Price3  
Item2_____Price2  
Item2_____Price3  
Item3_____Price1  
Item3_____Price2  
Item3_____Price3  

我想只返回Item 2的SET(两行),因为该Item不存在Price1。由于Item1和Item3包含其上有Price1的行,因此我想排除这些项的所有行。 我想撤回

Item______Price  
Item2_____Price2  
Item2_____Price3  

我在我的脚本上尝试了以下内容,但它没有返回任何结果。我不确定我做错了什么,在写这篇文章和理解这些东西时,我仍然非常环保。

而不是EXISTS(                       选择 *                       来自sqlmgr.PRICE P2                       AND(P2.PRICE =' PRICE1')

1 个答案:

答案 0 :(得分:2)

您需要NOT EXISTS的相关子查询:

NOT EXISTS (SELECT 1
            FROM sqlmgr.PRICE P2
            WHERE p2.ITEM = p.ITEM AND P2.PRICE = 'PRICE1'
           )

你的版本没有返回任何内容,因为其中有PRICE1的记录 - 没有相关部分(p2.ITEM = p.ITEM),它会检查整个表而不仅仅是给定的感兴趣的项目行。

请注意,p是外部查询中表的别名,无论它是什么。