提问者:小点点

MySQL语句,列表以逗号分隔,SELECT在


有没有可能做这样的交叉陈述:

SELECT name FROM branchen WHERE id IN (SELECT value FROM metadata WHERE user_id=XX AND metakey = 'branche')

Result is:
Branche A

此结果只返回“branchen”的第一个值。 我会有一个这样的结果:

SELECT name FROM branchen WHERE id IN (1,2,3,4)

Result is:
Branche A
Branche B
Branche C

看来我必须将SELECT语句转换为字符串值?

SELECT value FROM metadata WHERE user_id=XX AND metakey = 'branche'
Result is: 
1,2,3

是的,如果该值在表中保存为自己的值会更好。 我此刻不会改变结构,所以也许有人能帮我?

多谢!


共2个答案

匿名用户

问题是value是字符串,而不是数字。 因为in比较是一个数字,所以它被转换为一个数字。

真正的修复是修复数据模型,这样您就不会将数字存储在字符串中。 但假设您遇到了非常糟糕的数据模型,您可以使用find_in_set():

SELECT b.name
FROM branchen b
WHERE EXISTS (SELECT 1
              FROM metadata md
              WHERE md.metakey = 'branche' AND
                    find_in_set(b.id, md.value) 
             );

匿名用户

可以使用string_split函数

declare @ids varchar (100);

SELECT @ids = value FROM metadata WHERE user_id=XX AND metakey = 'branche'

SELECT name FROM branchen WHERE id IN (select value from string_split(@ids, ','));

如果您使用mysql,那么您可以使用find_in_set。

string_split-此方法在给定分隔符上拆分字符串。