Запрос таблицы с двумя полями идентификатора - PullRequest
0 голосов
/ 31 октября 2018

У меня есть таблица с именем Actions с 2 идентификаторами: Ref & Status
Статус может быть любым из следующих: new, done

  Ref  |  Status  |  Date   
  ---------------------------------- 
   1   |   new    | 10/31/2018   
   1   |   done   | 10/31/2018
   2   |   new    | 10/31/2018

Я бы хотел запросить только те действия, которые new, но не done. В этом примере запрос вернет только 3-ю строку таблицы.

Вот то, что я пробовал до сих пор, но я получаю только действие, которое было переведено в статус done:

SELECT [2].[project title], [2].ref, [2].[Date] As [Creation Date]
    FROM (SELECT * From T_ACTIONS Where status = "New") AS [1],  
         (SELECT * From T_ACTIONS Where status = "Done") AS [2]
    WHERE [1].[Project Title] = [Insert a valid : Project Title]
    AND [1].[REF] = [2].[Ref]

Я использую Access 2016.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Вы можете LEFT JOIN свою таблицу действий для вложенного запроса SELECT, извлекающего все ссылки со статусом Done, с тестом для записей без соответствующей записи во вложенном запросе, например ::

SELECT a.*
FROM 
    Actions a LEFT JOIN (SELECT b.Ref FROM Actions b WHERE b.Status = 'Done') t
    ON a.Ref = t.Ref
WHERE
    a.Status = 'New' AND t.Ref IS NULL
0 голосов
/ 31 октября 2018

Другой метод использует агрегацию:

select ref
from actions
where status in ('new', 'done')
group by ref
having min(status) = max(status) and min(status) = 'new';
0 голосов
/ 31 октября 2018

Использование NOT EXISTS:

SELECT a.*
FROM Actions a
WHERE Status = 'new' AND
      NOT EXISTS (SELECT 1 FROM Actions a1 WHERE a1.REF = a.REF AND a1.Status = 'Done');
...