Я хочу получить записи нескольких значений для одного столбца - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь получить значения из базы данных на основе двух моих собственных значений, значения должны совпадать с идентификатором базы данных

id   contactid  flag        flag_type 
-----------------------------------
1    99         Volunteer   1 
2    99         Uploaded    2 
3    100        Via Import  3 
4    100        Volunteer   1  
5    100        Uploaded    2

Так что отсюда я хотел бы получить строки сидентификаторы 1 и 2, и игнорировать остальные значения.Но скажем, например, что строка с идентификатором 2 не существует, оператор не будет возвращать ни одной строки.

Я пробовал следующее утверждение, но, похоже, оно не работает:

SELECT * FROM docs WHERE id IN (1) AND id IN (2);

Ответы [ 3 ]

0 голосов
/ 30 июня 2019

вам нужен подзапрос

select id from table_name where contactid in (
select contactid
from table_nae
group by contactid
having count(*)=2
)

подзапрос выберет только те контакты, число которых равно двум, и в условии основного запроса поможет выбрать желаемый идентификатор

0 голосов
/ 30 июня 2019

Если вы хотите, чтобы контакты имели именно эти флаги, вы можете сделать:

select contactid
from t
group by contactid
having sum(flag = 1) > 0 and         -- has 1
       sum(flag = 2) > 0 and         -- has 2
       sum(flag not in (1, 2)) = 0;  -- has nothing else

Существуют различные способы получить исходные строки - используя in или exists или join:

select t.*
from t join
     (select contactid
      from t
      group by contactid
      having sum(flag = 1) > 0 and         -- has 1
             sum(flag = 2) > 0 and         -- has 2
             sum(flag not in (1, 2)) = 0   -- has nothing else
     ) tt
     on t.contactid = tt.contactid;
0 голосов
/ 30 июня 2019

Вы должны использовать ИЛИ

    SELECT * FROM docs 
    WHERE id IN (1) OR  id IN (2);

или

    SELECT * FROM docs 
    WHERE id = 1  
    OR  id = 2;

или если вам нужны записи для контакта с обоими идентификаторами (1,2), то

    select * from docs 
    inner join (
        select  contactid 
        from docs 
        where id IN (1, 2) 
        having count(distinct id ) = 2
    ) t on t.contactid = docs.contactid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...