有没有可能做出这样的交叉陈述:
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条答案
按热度按时间bprjcwpo1#
问题是
value
是字符串,不是数字。因为IN
比较就是一个数字,它被转换成一个数字。真正的解决方法是修复数据模型,这样就不会将数字存储在字符串中。但是假设你被一个非常糟糕的数据模型困住了,你可以使用
find_in_set()
取而代之的是:pgx2nnw82#
你可以用
string_split
功能如果您使用mysql,那么您可以使用find\ in\ u set。
string_split
-此方法在给定分隔符上拆分字符串。