SQL запрос с несколькими одинаковыми условиями - PullRequest
0 голосов
/ 17 марта 2020

Я работаю с Sybase DB и пытаюсь выбрать данные, используя несколько условий:

Имя таблицы "псевдоним".

a_id, a_data, a_type_id, a_value
------------------------------
    1,   666,       123, "value_1"
    2,   666,       456, "value_2"
    3,   777,       123, "value_4"
    4,   777,       456, "value_5"

У меня несколько условий:

1. a_type_id = 123 and a_value = "value_1" AND
2. a_type_id = 456 and a_value = "value_2"

Таким образом, результат должен быть a_data = 666, если оба условия выполнены. Запрос должен быть таким, но он, конечно, не работает, возвращает 0 результатов:

select a_data from alias where ( a_type_id = 123 AND a_value = "value_1" ) AND (a_type_id = 456 AND a_value = "value_2")

Ожидаемый результат a_data = 666.

Может кто-нибудь посоветовать что-нибудь обходное? Можно иметь 2, 3 или более условий, как указано выше.

1 Ответ

1 голос
/ 17 марта 2020

Использовать агрегирование и having:

select a_data
from t
where (a_type_id = 123 and a_value = 'value_1') or
      (a_type_id = 456 and a_value = 'value_2')
group by a_data
having count(*) = 2;

Примечание. Предполагается, что пары типа / значения не дублируются в исходных данных для данного значения a_data. Если они могут быть, то используйте:

having count(distinct a_type_id) = 2
...