Выберите ВСЕ записи с fieldvalue1, если какие-либо записи (с fieldvalue1) имеют fieldvalue3, имеют определенное значение - PullRequest
3 голосов
/ 20 сентября 2019

Мне нужно показать все записи для определенного значения, если ЛЮБАЯ из этих записей имеет другое конкретное значение.По сути, если field3 = 'b', что такое field1?Показать все записи со значением field1 независимо от их значения field3.

Record Number   External Id Letter
1            123456            a
2            123456            b
3            123456           c
4            456852           t
5            456852           b

запись 2 имеет буквенное значение 'b' - поэтому я хочу посмотреть на externalid, который равен 123456, теперь я хочу получить все записи для внешнего идентификатора независимо от того, есть ли в других записях буквазначение 'b'

Ответы [ 2 ]

3 голосов
/ 20 сентября 2019

Используйте EXISTS и коррелированный подзапрос:

SELECT *
FROM mytable t
WHERE 
    t.letter = 'b'
    OR EXISTS (
        SELECT 1
        FROM mytable t1
        WHERE 
            t1.record_number != t.record_number 
            AND t1.external_id = t.external_id 
            AND t1.letter = 'b'
    )

Другой вариант - использовать оконную функцию:

SELECT record_number, external_id, letter
FROM (
    SELECT 
        t.*,
        MAX(CASE WHEN letter = 'b' THEN 1 END) OVER(PARTITION BY external_id) mx
    FROM mytable t
) x WHERE mx = 1

Демонстрация на DB Fiddle :

record_number | external_id | letter
------------: | ----------: | :-----
            1 |      123456 | a     
            2 |      123456 | b     
            3 |      123456 | c     
            4 |      456852 | t     
            5 |      456852 | b     
0 голосов
/ 20 сентября 2019

Используйте exists, но не беспокойтесь о фильтрации во внешнем запросе:

select t.*
from t
where exists (select 1
              from t t2
              where t2.external_id = t.external_id and t2.letter = 'b'
             );

Если индекс равен (external_id, letter), я ожидаю, что он будет иметь очень хорошую производительность.

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