Как пропустить идентификатор, который сопоставлен с несколькими значениями на основе одного из этих значений из таблицы - PullRequest
0 голосов
/ 30 апреля 2018

Я понимаю, что это может показаться странным, поэтому позвольте мне объяснить, чего я пытаюсь достичь. У меня есть следующие данные.

trxn_id      event_value
1567           4
1567           1
1567          23
2568           1
2568           4
2568           5

Теперь мне нужно выбрать все те транзакции, которые не имеют значения события 23.

Если я сделаю select trxn_id from table where event_value<>23, тогда, по-видимому, я получу идентификатор trxn, поскольку в нем появляются и другие значения события.

что я сделал, чтобы решить эту проблему - это выбрать отдельный trxn_id, перебрать их и вставить только те из них, которые не имеют event_value 23. Как показано ниже.

FOR v_intrim_loop1 IN (select distinct t.trxn_id from table t)
  LOOP
    BEGIN
    if(not exists(select 1 from table where event_id=23 and trxn_id=v_intrim_loop1.trxn_id)) THEN
        insert into temp_table(trxn_id) values (v_intrim_loop1.trxn_id);
    END IF;
    END;
 END LOOP;

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

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Попробуйте это:

SELECT trxn_id , event_value
  FROM MyTable
 WHERE trxn_id NOT IN ( SELECT DISTINCT trxn_id
                         WHERE event_value = 23
                      )
0 голосов
/ 30 апреля 2018
select trxn_id
from table1
group by trxn_id
having count(case event_value when 23 then 1 end) = 0

Идея состоит в том, чтобы использовать group by для создания фрагментов строк с одинаковым trxn_id.

Затем мы используем having, чтобы отфильтровать все чанки, имеющие более 0 строк, с event_value = 23. 1 здесь просто фиктивное ненулевое значение; если event_value не равно 23, выражение case возвращает null, которое пропускается на count.

0 голосов
/ 30 апреля 2018

Из того, что я понял, вы хотите пропустить trxn_id -> 1567, поскольку оно появляется в event_value -> 23.

Если я правильно понял, этот запрос поможет вам.

SELECT 
    distinct trxn_id 
FROM 
    tablename
WHERE 
    trxn_id NOT IN 
        (
            SELECT trxn_id from tablename where event_value=23
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...