我正在尝试编写一个在字段中搜索“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')))
答案 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>