如何使用IN()编写mysql连接查询

如何使用IN()编写mysql连接查询,mysql,function,join,Mysql,Function,Join,你能帮我写我的MySQL连接查询吗。以下是我到目前为止的情况: SELECT * FROM table1 LEFT JOIN table2 ON table2.id IN (table1.comma_separated_ids) WHERE table1.id = [some id] 其中table1.comma_separated_id是一个VARCHAR列,包含与表2中的id相关的逗号分隔的id(整数)列表 当上面的查询应该返回表1中的每一行时,它只返回一行。表2中有匹配行的逗号分隔ID

你能帮我写我的MySQL连接查询吗。以下是我到目前为止的情况:

SELECT * FROM table1 LEFT JOIN table2 ON table2.id IN 
(table1.comma_separated_ids) WHERE table1.id = [some id]
其中table1.comma_separated_id是一个VARCHAR列,包含与表2中的id相关的逗号分隔的id(整数)列表

当上面的查询应该返回表1中的每一行时,它只返回一行。表2中有匹配行的逗号分隔ID


我实际上想做的事情有点复杂,但很难解释,所以我从这里开始。有什么帮助吗?

在MySQL中,您不能将逗号分隔的列表作为单个参数放入中的
。它被视为一个字符串,一个单独的字符串

您可以使用
find\u in\u set()


但是,更大的问题是您将ID存储在逗号分隔的列表中。这些应该在一个单独的连接表中,每个id一行。用字符串存储列表已经够糟糕的了;存储整数ID更糟糕。

谢谢。我注意到,当我使用EXPLAIN运行这个查询时,它没有使用表2上的索引来查找这些记录。没有别的办法吗?再次感谢。@PHPguru。当然不是。如果想要提高性能,需要使用连接表正确地构造数据。有没有一种方法可以像我最初的示例中那样使用IN()实现这一点?似乎如果这只适用于IN(),那么它可以为我们提供索引。这是别人的数据库设计。@PHPguru。不,不是在这种情况下。如果希望MySQL使用索引,请修复数据结构。如果IN()可以使用索引,如果PostgreSQL可以在这样的查询上使用索引,那么MySQL没有理由不让它也使用索引。
SELECT *
FROM table1 LEFT JOIN
     table2
     ON find_in_set(table2.id, table1.comma_separated_ids)
WHERE table1.id = XXX;