Скажем, у меня есть таблица, содержащая следующие значения:

ID | role | group | name
--------------------------
1  | A    | A     | John
2  | B    | A     | Paul
3  | C    | A     | Mary
4  | A    | B     | Peter
5  | B    | B     | Mark
6  | C    | B     | May
7  | A    | C     | Sam
8  | B    | C     | Samson
9  | C    | C     | Naomi

Затем, скажем, мне нужен пользователь из группы B с ролью A и пользователь из группы C с ролью C, я могу написать SQL, как показано ниже:

select * from my_table 
where (role = 'A' and group = 'B') 
   or (role = 'C' and group = 'C')

Это работает, но проблема в том, что на самом деле эти наборы должны быть установлены пользователем, и их будет много. Обычно, если это только запрос с одним значением, я могу:

select * from my_table where id in (:id_list)

Затем я могу передать массив идентификаторов напрямую в оператор. Есть ли способ использовать where в нескольких значениях в виде набора?

P.S. Я использую PHP с базой данных оракула, но я думаю, что это не имеет большого значения, поскольку я прошу инструкцию SQL.

0
cytsunny 18 Май 2018 в 13:59

1 ответ

Лучший ответ

Я не знаю php, но ваш SQL-запрос эквивалентен этому, если он вам чем-то поможет. GROUP - ключевое слово sql, я изменил его на grp

SELECT * 
FROM   my_table 
WHERE  ( role, grp ) IN ( ( 'A', 'B' ), ( 'C', 'C' ) ); 

Демо

2
Kaushik Nayak 18 Май 2018 в 11:17