数据库
首页 > 数据库> > mysql – 筛选数组上具有列条件的行

mysql – 筛选数组上具有列条件的行

作者:互联网

我有一个表my_table:

id  x_id type
--- ---- ----
1    31   a
2    14   b
3    31   c
4    12   c
5    31   b
6    12   c
7    14   a

我想返回所有行,其中x_id的类型符合数组arr中的所有元素.

编辑:但是,该数组中的实际值及其数量是未知的,但可能是列类型的值. arr中始终至少有一个值.

所以对于arr = [b,c],我应该得到以下结果:

id  x_id type
--- ---- ----
3    31   c
5    31   b

我如何编写查询来获得这样的结果?

注意:我对sql命令并不熟悉,所以如果没有意义,请帮助我编辑我的问题.

解决方法:

select *
  from my_table
 where x_id in (select x.x_id
                  from (select x_id from my_table where type = 'b') x
                  join (select x_id from my_table where type = 'c') y
                    on x.x_id = y.x_id)
   and type in ('b', 'c')

小提琴测试:http://sqlfiddle.com/#!2/f8601/2/0

这可能更符合变量(有一个变量用于保存’b’,’c’格式的类型列表,另一个变量用于保存类型的数量.有没有办法可以获得一个变量来保存变量中的变量数组为该值:’b’,’c’?

select *
  from my_table
 where x_id in (select x_id
                  from my_table
                 where type in ('b', 'c')
                 group by x_id
                having count(distinct type) = 2)
   and type in ('b', 'c')

小提琴:http://sqlfiddle.com/#!2/f8601/12/0

因此,您将使用()中的2类型变量(()中的变量)和保持计数的变量代替2.

标签:sql,mysql,dynamic-sql
来源: https://codeday.me/bug/20190830/1767400.html