Как сделать запрос внутри одной таблицы - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно запросить одну таблицу на основе содержимого этой же таблицы

В настоящее время я использовал in в and, что занимает много времени для запроса, и я знаю, что нетсамый умный способ

PID CID Status
1   1   1
1   2   0
1   3   1
1   4   1
1   5   1
2   1   1
2   2   1
2   3   1
2   4   0
2   5   0

из вышеприведенной таблицы. Мне нужны результаты, которые удовлетворяют следующей комбинации

Select PID from Tablename where 
(CID in (1) AND status 1)
AND
(CID in (2,3) AND status = 1)
AND
(CID in (4) AND status = 1)
AND 
(CID in (5) AND status = 1)

. Так, как указано выше, я должен получить только PID 1

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Это должно получить все PID, которые существуют во всех операторах выбора:

SELECT PID FROM TableName WHERE CID = 1 AND Status = 1
INTERSECT
SELECT PID FROM TableName WHERE CID IN (2, 3) AND Status = 1
INTERSECT
SELECT PID FROM TableName WHERE CID = 4 AND Status = 1
INTERSECT
SELECT PID FROM TableName WHERE CID = 5 AND Status = 1
0 голосов
/ 10 апреля 2019

Вы, кажется, хотите:

Select PID
from Tablename 
where status = 1
group by PID
having sum(case when CID in (1) then 1 else 0 end) > 0 and
       sum(case when CID in (2, 3) then 1 else 0 end) > 0 and
       sum(case when CID in (4) then 1 else 0 end) > 0 and
       sum(case when CID in (5) then 1 else 0 end) > 0;

Ваш запрос проверяет только значения в одной строке.Условие where никогда не может быть оценено как истинное.

Здесь - скрипта db <>, показывающая, что это возвращает PID = 1 для данных в вашем примере.

...