我有一个具有多个参数的 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/