选择“查询不适用于位置”


Select Query not work with where in

我有两个表

一个表是Alldata(这里info_id是使用php插入的文本字段数据)

=================
id  |   info_id
=================
1   |    2, 3, 5, 9
2   |
=================

second table is info
=================
id  |   name
=================
1   |    one
2   |    two
3   |    three
4   |    four
5   |    five
6   |    six
7   |    seven
9   |    eight
9   |    nine
=================

现在我想从表二中选择数据列表,其中数据 ID 将与表一的第一项info_id数据匹配

我的查询是

SELECT i.* FROM `info` as i,`alldata` as a where  i.id IN(a.info_id) and a.id=1

我的查询有效,但仅从表二中选择一个项目。但是有多个匹配的。

你的数据库设计非常糟糕。 首先,将数字 ID 存储为字符串是一个坏主意——数字应该存储为数字。 其次,SQL为存储列表提供了这种出色的数据结构。 它被称为,而不是字符串。

你真的应该有一个接线表,每id一行,info_id.

也就是说,有时我们会遇到不合格的数据结构。 MySQL为此提供支持。 您可以使用:

SELECT i.*
FROM `info` i JOIN
     `alldata` a 
     ON FIND_IN_SET(i.id, REPLACE(a.info_id, ', ', ',') ) > 0
WHERE a.id = 1;

您还应该学习使用正确、明确的join语法。 如果使用此方法,则不允许抱怨性能,而不是修复数据库设计。 MySQL不能利用索引之类的东西来提高此类查询的性能。