2015-10-07 1 views
-4

Я пытаюсь написать запрос, который ищет «A» внутри поля, и, если найден, ищет «B» в другом экземпляре того же поля , Каков наилучший способ сделать это?SQL Если найдена «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

Oracle DB, в частности запрос PeopleSoft – glennsnoise

+1

Lookup 'EXISTS'. – Siyual

+1

Укажите примерный запрос, даже тот, который не работает, чтобы проиллюстрировать, что именно вы пытаетесь сделать. Прямо сейчас, не ясно, хотите ли вы фильтр, существует или case case. –

ответ

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> 
+0

Спасибо за« фундаментальное недоразумение » «dig. Я связал таблицы A и B в каждом вложенном SELECT с помощью DEPT_NBR и получил то, что мне было нужно. – glennsnoise

+1

Не раскопал ... пытался объяснить вам, почему ваша модель не работает. –

Смежные вопросы