关于如何使用存在和不存在的 PL/SQL 查询的问题

Posted

技术标签:

【中文标题】关于如何使用存在和不存在的 PL/SQL 查询的问题【英文标题】:Issue with PL/SQL Query of how to use exists and not exists 【发布时间】:2013-03-19 17:33:55 【问题描述】:

我有一张包含位置详细信息的表格:-

Location id    Manager Name             SubFunction      
  1             HR      XYZ             direct sales    
  2             IT      ABC             Gaming         
   3            HR      DEC              Agent     

Location id   Lookupcode
1          123
2          126
3          231
4          222

子函数表详细信息:-

Lookup code  Subfunction
123          Agent
126          Gaming
222          Customer services

基本上,我有两张表,其中一张的位置定义了函数、子函数 另一个带有子功能表的子功能表,其子功能名称用于位置表。

现在我必须编写一个 PL/SQL 查询,以便将位置表中不存在的所有函数显示为仅将管理器作为“HR”。我尝试了以下查询:-

select Subfuntion
from subfunction_table
where exists                     //Part a
(select null
from subfunction_table

)
and not exists
(select null                 // Partb
from 
location
where manger='HR')

例如:- 在子功能表中的上表中有“客户服务”,它在子功能表中但不在位置中,因此查询应显示子功能“客户服务”

但我没有得到关于如何使用从 Part a 到 Part b 的子函数名称的逻辑

【问题讨论】:

那么,您使用的是 SQL Server,但语言是 PLSQL 而不是 T-SQL? 标签错误..我更正了..我正在使用 sql developer “不在位置”表中的函数从何而来? 函数和子子函数表被单独定义为子函数..但它不是必需的所以我没有提到 Location 和 Subfunction_table 是否在数字键 location.SubFunction=Subfunction_table.Lookup 上连接? 【参考方案1】:
SELECT *
  FROM subfunction sf
 WHERE NOT EXISTS (SELECT 1
                     FROM function f JOIN location l USING (locationid)
                    WHERE l.manager = 'HR');

这就是你要找的东西?这是我从你的问题中了解到的。

【讨论】:

以上是关于关于如何使用存在和不存在的 PL/SQL 查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

在pl/sql中怎么查询所有存在的表,以及怎么样获得未知表中的某一字段

如何根据 PL/SQL 变量值检查输入参数值是不是存在作为列表?

imp命令导入dmp文件,提示成功无警告,但是在pl sql 查询,提示表不存在,是怎么回事?

如何使用 PL/SQL 函数比较两个表?

检查数据库中是不是存在表 - PL SQL

如何执行已经存在的 PL/SQL。 (甲骨文 APEX 21.1)