Mysql查询其中的字段(选择列值)不起作用

时间:2018-06-01 09:54:42

标签: mysql sql select subquery where-in

我试图在where子句的帮助下获取一些值,并且where子句的值是同一个表中记录的值。

例如,

select requestedusers from users where username = 'xyz'

当我运行上述查询时,它会给我abc,mno,tuv

这样的结果

我在select data from users where username in (abc,mno,tuv)这样的另一个查询中使用了该结果,我得到了最终结果。

但我需要在select data from users where username in (select requestedusers from users where username = 'xyz');这样的单个查询中获取最终结果。

当我尝试像这样运行查询时,它会返回空集。

1 个答案:

答案 0 :(得分:2)

修复您的数据结构!不要将逗号分隔的列表存储在单个列中。 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'
             );

表现不好。除了修复数据模型之外,几乎没有什么方法可以修复性能。