中的Mysql在5.1上停止工作

中的Mysql在5.1上停止工作,mysql,Mysql,我正在尝试在Windows上的Mysql服务器5.1中做一些事情 我确信这种类型的查询在较旧版本的Mysql中可以正常工作,因为我以前将它提供给客户机时没有出现任何问题 基本上,我的一个表中的一个字段包含几个ID;例如1,2,3,4,5 该字段的类型为varchar 我试图通过使用in语句查看字段中是否存在值,如下所示。但它什么也不返回 我做错了什么?有更好的办法吗?谢谢 mysql> create database testing; Query OK, 1 row affected (0

我正在尝试在Windows上的Mysql服务器5.1中做一些事情

我确信这种类型的查询在较旧版本的Mysql中可以正常工作,因为我以前将它提供给客户机时没有出现任何问题

基本上,我的一个表中的一个字段包含几个ID;例如1,2,3,4,5

该字段的类型为varchar

我试图通过使用in语句查看字段中是否存在值,如下所示。但它什么也不返回

我做错了什么?有更好的办法吗?谢谢

mysql> create database testing;
Query OK, 1 row affected (0.00 sec)

mysql> use testing;
Database changed
mysql> create table table1(field1 char(20));
Query OK, 0 rows affected (0.01 sec)

mysql> create table table2(field2 char(20));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into table1 values('1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into table2 values('1,2,3');
Query OK, 1 row affected (0.00 sec)

mysql> select * from table1 where field1 in (select field2 from table2);
Empty set (0.00 sec)
最有可能的是

insert into table2 values('1');
insert into table2 values('2');
insert into table2 values('3');
然后,表2中的子选择select field2返回“1”、“2”、“3”,可以使用IN运算符检查主选择中相应字段的结果是否包含在此集合中

根据评论,相同的模式似乎以前也适用过。我不知道IN运算符可以像问题中那样使用,而且将列值拆分为行集似乎非常重要

使用@KaeL建议的FIND_IN_SET函数,以下查询应该可以工作:

SELECT b.*
FROM table2 a
INNER JOIN table1 b ON FIND_IN_SET(b.field1, a.field2) > 0;
另见

无论如何,当单独的值被存储在单独的表中的单独行中时,应该考虑使用字符串列表来规范模式,因为单个字段的值通常可以更好地由关系数据库处理。 显示可能的解决方案。

从查询中从表1中选择*其中从表2中选择字段2中的字段1;,我想象的是这样的:

从表2中剖析子查询select field2,您将有:

field2
'1,2,3'
然后,主查询将是替换:

从表1中选择*,其中字段1位于“1,2,3”中

显然,它不会返回任何行,因为table1.field1的唯一值是“1”。和"1,1,2,3"

好吧,我打赌你在找这个:

示例查询:


选择在_集合'1','1,2,3'中查找_;将返回1。

这是您的错误mysql>插入表2中的值'1,2,3';但我只有一行可以比较。i、 e一个人的一行包含一个鞋码字段,8,9,10,我想检查字段中是否有值9。好的,这意味着您在问题中所示的模式创建和数据插入是正确的?
field2
'1,2,3'