2013-08-27 2 views
0

Я пытаюсь написать SQL-запрос, чтобы возвращать все строки в таблице без соответствующего значения.Внутреннее соединение SQL без соответствия (та же таблица)

У меня есть компания, работа, subjob, costcode и costtype (среди других полей). Мне нужно вернуть все строки, которые имеют «J» costtype, но не «L» costtype.

Это, вероятно, лучше объяснить с данными:

Company Job  Subjob Costcode Costtype 
------- -------- ------- --------- ---------- 
    1  1234    0132  J 
    1  2345  01  9394  E 
    1  2345  02  9233  L 
    1  2345  02  9992  J 
    1  2345  02  9992  L 
    1  2345  03  1112  J 
    1  3384    3928  J 
    1  3384  03  3928  J 
    1  3384  11  2838  L 

Так что я бы ожидать следующее:

Company Job  Subjob Costcode Costtype 
------- -------- ------- --------- ---------- 
    1  1234    0132  J 
    1  2345  03  1112  J 
    1  3384    3928  J 
    1  3384  03  3928  J 

Я знаю, что это что-то просто я не хватает, но не может получить правильную комбинацию JOIN, ON и WHERE, чтобы заставить его работать.

+0

звучит скорее как вы хотите использовать 'EXISTS' против соединения (или, более конкретно,' NOT EXISTS' в этом сценарии). –

ответ

2

Нет необходимости использовать JOIN S:

SELECT * 
FROM YourTable A 
WHERE EXISTS(SELECT 1 FROM YourTable 
      WHERE Company = A.Company 
      AND Job = A.Job 
      AND Costtype = 'J') 
AND NOT EXISTS(SELECT 1 FROM YourTable 
       WHERE Company = A.Company 
       AND Job = A.Job 
       AND Costtype = 'L') 
0

ВЫБРАТЬ компании, работу, подзадание, costcode ИЗ таблицы ГДЕ Компания = A.Company И Job = A.Job И Costtype = 'J' Минус ВЫБРАТЬ компания, работа, подзадание, costcode, ИЗ таблицы ГДЕ компания = A.Company И Job = A.Job И Costtype = 'L'

Надеюсь, это удовлетворит, если вы не хотите отображать тип затрат в своем результирующем наборе.

0
SELECT * FROM COMPO T1 
WHERE Costtype='J' 
AND NOT EXISTS 
(SELECT * FROM COMPO T2 WHERE T1.Costcode=T2.Costcode AND Costtype ='L') 

Company    Job  Subjob   Costcode   Costtype 
1     1,234  ?    0,132   J 
1     2,345  3    1,112   J 
1     3,384  ?    3,928   J 
1     3,384  3    3,928   J 
Смежные вопросы