【问题标题】:How to use a multiple values in where in statement of SQL?如何在 SQL 语句的 where 中使用多个值?
【发布时间】:2018-05-18 10:59:48
【问题描述】:

假设我有一个包含以下值的表:

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)

然后我可以直接将一组 ID 传递到语句中。有没有办法可以在多个值中使用 where in 作为一个集合?

附:我正在将 PHP 与 oracle 数据库一起使用,但我认为这并不重要,因为我要求的是 SQL 语句。

【问题讨论】:

  • 您如何执行此操作取决于您使用的数据库以及您用于访问它的应用程序。请适当标记。
  • 已添加....虽然我想知道这是否真的那么重要。
  • 关于but I think that should not matter much as I am asking for a SQL statement.,当然很重要。你知道 SQL 中的 S 不代表 Standard,对吧?
  • 您当前的查询有什么问题以及会发生什么变化使其无法使用?
  • @TimBiegeleisen 。 . . OP 正在询问如何以简单的方式从 PHP 中传递很多对。

标签: php sql oracle


【解决方案1】:

我不知道 php,但你的 SQL 查询等价于这个,如果它在某种程度上对你有帮助的话。 GROUP是sql关键字,我改成grp

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

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多