mySQL SELECT IN来自string

时间:2010-01-28 08:22:47

标签: mysql

这是我的表X:

id      vals
---------------------
1       4|6|8|

现在表Y:

id      name
--------------------
1        a
4        b
6        c
8        d

现在我想要以下内容:

select * from Y where id IN (replace(select vals from X where id = '1'),'|',',')

但这似乎不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您可以使用FIND_IN_SET而不只是IN,普通IN关键字无法在一个字段中的逗号分隔值之间进行搜索。

例如

mysql> select FIND_IN_SET(4, replace('4|6|8|','|',','));

+-------------------------------------------+
| FIND_IN_SET(4, replace('4|6|8|','|',',')) |
+-------------------------------------------+
|                                         1 |
+-------------------------------------------+
1 row in set (0.00 sec)

答案 1 :(得分:0)

Replace会给你一个字符串 - 但它是一个字符串值,而不是你查询中的字符串。

您可以做的不是使用IN,而是使用REGEXP匹配原始字符串,例如:

vals REGEXP '[[:<:]]4[[:>:]]'

只有在原始字符串中有一个不是较大数字的一部分的“4”时才会成立(因此,如果你有3 | 44 | 100,它将不匹配“4”但会匹配“44”)。

[[:<:]][[:>:]]分别是“单词的左侧”和“单词的右侧”。

要生成该字符串,您可以执行类似......

的操作
CONCAT('[[:<:]]', CAST(id AS CHAR), '[[:>:]]')