我有一张这样的表
id|v
----
ab|1
ab|2
yz|1
yz|2
yz|3
如果在输入中我有(1,2)或(2,1) - >我想提取id ab
如果在输入中我有(1,2,3)或(1,3,2)或(2,1,3)或(2,3,1)或(3,1,2)或(3,2,1) - >我想提取id yz
任何其他输入 - >没有
编辑: 输入来自另一个表。它可以在1列表中(即使在数组中也可以)。示例:
v or v or ...
- -
1 3
2 2
1
由于
答案 0 :(得分:0)
如果将输入值作为数组传递,则可以使用group_concat
函数。像这样:
select t.id from (
select id, group_concat(v separator ',') as v_grouped
from temp
group by id ) as t
where t.v_grouped = group_concat(input separator ',')
答案 1 :(得分:0)
select *
from my_table as t
where (select count(1) from my_table t2 where t2.id = t.id) = (select count(1) from my_input)
;
set @number_of_rows := 3;
select *
from my_table as t
where (select count(1) from my_table t2 where t2.id = t.id) = @number_of_rows
;
答案 2 :(得分:0)
您说您有一个现有查询,为您提供要在表格中查找的值。所以结果可能如下所示:
value 2 1
您正在寻找表中具有这些值的ID,不多也不少,没有不同的ID。因此,您希望将可以表示的值集匹配为一组经过排序的逗号分隔值,即'1,2'
,'1,2,3'
等。
因此,唯一的任务是构建这些字符串(使用GROUP_CONCAT
)并比较:
select id
from mytable
group by id
having group_concat(v order by v) in
(
select group_concat(value order by value)
from your_existing_query
);
如果要显示找到的ID的记录:
select *
from mytable
where id in
(
select id
from mytable
group by id
having group_concat(v order by v) in
(
select group_concat(value order by value)
from your_existing_query
)
);