mysql查询where字段in(select column value)不起作用

jgovgodb  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(529)

我试图借助where子句获得一些值,where子句的值是来自同一个表中记录的值。
例如, select requestedusers from users where username = 'xyz' 当我运行上面的查询时,它会给出如下结果 ,mno,tuv 我在另一个查询中使用了这个结果,比如 select data from users where username in (,mno,tuv) 我正在得到最终的结果。
但是我需要在一个查询中获得最终结果,比如 select data from users where username in (select requestedusers from users where username = 'xyz'); .
当我尝试这样运行查询时,它会返回空集。

jbose2ul

jbose2ul1#

修复数据结构!不要将逗号分隔的列表存储在单个列中。sql有非常好的列表数据结构。它被称为表,而不是字符串。
你想要一个连接表;也就是说,每个用户和每个请求的用户都有一行的表。
也就是说,有时我们会被其他人的糟糕的设计决策所困扰。在这种情况下,您可以使用 find_in_set() :

select data
from users u
where exists (select 1 
              from users u2
              where find_in_set(u.username, u2.requestedusers) > 0 and
                    u2.username = 'xyz'
             );

表现会很差。除了修复数据模型之外,几乎没有其他方法可以修复性能。

相关问题