我试图在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');
这样的单个查询中获取最终结果。
当我尝试像这样运行查询时,它会返回空集。
答案 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'
);
表现不好。除了修复数据模型之外,几乎没有什么方法可以修复性能。