SQL如果找到“A”,则搜索“B”

时间:2015-10-07 18:59:19

标签: sql oracle if-statement select peoplesoft

我正在尝试编写一个在字段中搜索“A”的查询,如果找到,则在同一字段的另一个实例中搜索“B”。这样做的最佳方式是什么?

SELECT DISTINCT A.DEPT_NBR, A.JOBTITLE, B.JOBTITLE
FROM MYTABLE A
WHERE ((A.JOBTITLE = 'JR_ACCOUNTANT'
    AND NOT EXISTS (SELECT B.* FROM MYTABLE B
                    WHERE B.JOBTITLE = 'SR_ACCOUNTANT'))
   OR (A.JOBTITLE = 'SR_ACCOUNTANT'
       AND NOT EXISTS (SELECT B.* FROM MYTABLE B
                       WHERE B.JOBTITLE = 'JR_ACCOUNTANT'))
   OR (A.JOBTITLE = 'JR_MANAGER'
       AND NOT EXISTS (SELECT B.* FROM MYTABLE B
                       WHERE B.JOBTITLE = 'SR_MANAGER'))
   OR (A.JOBTITLE = 'SR_MANAGER'
       AND NOT EXISTS(SELECT B.* FROM MYTABLE B
                      WHERE B.JOBTITLE = 'JR_MANAGER')))

1 个答案:

答案 0 :(得分:0)

所以你的问题表明了对sql如何工作的根本误解。 SQL查询没有像if语句或for循环那样的控制流结构。虽然此功能以多种方式提供(最明显的是CASE语句),但查询不会像这样运行。相反,查询本质上是设置操作。

根据您的编写,您似乎想要从同一个表中找到一些值的配对。您将需要一个类似于以下内容的查询结构。注意A,B是交叉连接;您可以将其替换为A INNER JOIN B ON <condition>

SELECT A.Field1, A.Field2, B.Field2
FROM
A, B 
WHERE
<CONDITIONS>