mysql - 如何在查询中使用数组参数使用 AND 条件

标签 mysql sql-server oracle oracle-sqldeveloper

我有一个具有多个参数的 oracle 查询,其中一个参数就像一个数组,参数名称例如:COLOR。假设我有一张 table PEOPLE

 ID    NAME   WARECOLOR
 12   Sabrina   red
 12   Sabrina   blue
 32   Mark      blue
 45   Bob       red 
 25   Lean      white
 01   Sara      Orange

我想在两个不同的查询中以两种方式使用此参数,一种使用 OR 条件,另一种使用 AND 条件。假设我想要所有有“红色或蓝色”的名字 如果我将参数发送到 :COLORS 为

|red|blue|

并写下这个查询

SELECT ID, NAME, COLOR
FROM PEOPLE
WHERE  INSTR(:COLORS, COLORS) > 0
GROUP ID, NAME, COLOR;

结果是这样的:

 ID    NAME   WARECOLOR
 12   Sabrina   red
 12   Sabrina   blue
 32   Mark      blue
 45   Bob       red 

这很好,但我的问题是:如何将它用作 AND 条件? 就像如果我想要所有具有“红色和蓝色”的名字,这意味着结果应该是这样的:

 ID    NAME   WARECOLOR
 12   Sabrina   red
 12   Sabrina   blue

有人可以帮我解决这个问题吗?

最佳答案

要找到这些人,您可以:

SELECT ID, NAME
FROM PEOPLE
WHERE  INSTR(:COLORS, WARECOLOR) > 0
GROUP ID, NAME
HAVING COUNT(*) = regexp_count(:COLORS,'[|]') - 1 ;

regexp_count(:COLORS,'[|]') 只是计算来自 :COLORS 的 |。 如果您的表没有正确规范化(您有重复项),您可以使用 count(distinct WARECOLOR) 而不是 count(*)

那么获取行就简单了:

SELECT ID, NAME, COLOR
FROM PEOPLE
WHERE  id, name in (
    SELECT ID, NAME
    FROM PEOPLE
    WHERE  INSTR(:COLORS, WARECOLOR) > 0
    GROUP ID, NAME
    HAVING COUNT(*) = regexp_count(:COLORS,'[|]') - 1 ;
 )
;

关于mysql - 如何在查询中使用数组参数使用 AND 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37452178/

相关文章:

mysql - 如何执行MySQL order by x where (x=col3 if col3!=null, else x=col2)?

mysql - 重置子查询中的变量

PHP MYSQL 错误,查询无效(但不是无效的)

sql-server - t-sql 计算文本列中的唯一单词

sql - 基于带有 'WITH'子句的SELECT的 View

mysql - 删除 Mysql 值

sql-server - 如何强制 SQL Server 返回空 JSON 数组

sql - 为什么我不能简单地添加包含所有列的索引?

c# - ODP.net 将 UDT 作为表传递给 C# 中的存储过程

java - Websphere Application Server 6.1数据源上的UnsatisfiedLinkError