我有一个包含员工信息的表。该表显示了整个员工层次结构。给定的员工可以处于层次结构的任何级别。如果我想知道特定员工的给定属性,我可以使用 where 子句编写 SQL 语句
where '[email protected]' in ANY(manager_3, manager_4, manager_5, manager_6, employee_email)
这很好用。挑战是当我有多名员工(可能是也可能不是经理)时。我无法更改表结构。我的查询最终结果是列出 1 名或多名员工的层次结构链中的所有个人。假设我有3个人。我不知道他们处于哪个层级。我需要找到层次结构中向这 3 个人汇报的每个人。我需要做的是与此类似的事情(并且我知道这不是有效的 SQL)...
select employee_email from myTable
where ('[email protected]', '[email protected]', '[email protected]') =
Any(manager_3, manager_4, manager_5, manager_6, employee_email)
有没有一种更干净/更优化的方法来编写这个而不是使用 3 个单独的 ANY 子句?
**** 编辑 ***** 只是为了以后搜索这个问题的人,我最终使用了答案中列出的 SUB_QUERY,但我没有使用 DUAL 进行多个查询,而是使用了分割例程...
WITH
Q_STR AS (SELECT 'YOUR,COMMA,SEPARATED,STRING' STR FROM DUAL)
SELECT
TRIM(COLUMN_VALUE) COL1
FROM Q_STR,
XMLTABLE(('"' || REPLACE(STR, ',', '","') || '"'));
使用
OR
:或者:
或连接到包含所需值的子查询分解子句:
或结合前两个使用
EXISTS
(而不是IN
):