Где заявление отменяет результаты? - PullRequest
0 голосов
/ 13 марта 2019

Я бы хотел найти UID числа из приведенного ниже примера, которые встречают противоречащее утверждение, но это правда.Идея состоит в том, чтобы доказать, что «открытый» & «дочерний элемент» не может существовать, если «закрытый» родительский элемент & находится в данных.Пример ниже должен вернуть UID=789 как ошибку варианта использования.

UID     Title   Business
123     Parent  Open
123     Child 1 Open
123     Child 2 Open
456     Parent  Closed
456     Child 1 Closed
456     Child 2 Closed
789     Parent  Closed
789     Child 1 Open
789     Child 2 Closed

Я ничего не возвращаю с

select UID from TABLE
where  
(TITLE = 'Parent' and Business = 'Closed') 
and
(TITLE like 'Child%' and Business = 'Open')

Ответы [ 3 ]

2 голосов
/ 13 марта 2019

Вы можете агрегировать по UID и использовать HAVING, чтобы проверить, существуют ли записи для обоих условий:

select uid
from TABLE
group by uid  
having count(case when title = 'Parent' and business = 'Closed' then 1 end) > 0
   and count(case when title like 'Child%' and business = 'Open' then 1 end) > 0;
1 голос
/ 13 марта 2019

Звучит так, будто вы хотите присоединить таблицу к себе, а затем искать недопустимую комбинацию:

SELECT DISTINCT t1.UID
FROM Table t1
INNER JOIN Table t2 ON t1.UID = t2.UID
WHERE t1.Title = 'Parent' AND
      t1.Business = 'Closed' AND
      t2.Title LIKE 'Child%' AND
      t2.Business = 'Open'
0 голосов
/ 13 марта 2019

попробуйте, как показано ниже, используя существует

select t1.* from 
table t1
where t1.Title in ('parent','closed')
and not exists ( select 1 from table t2 where t1.UID=t2.UID  
       and Business='Open' and Title ='Child'  ) 
union 
select * from table 
where Title not in ('parent','closed')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...