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

时间:2015-03-20 02:32:02

标签: 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_ids是一个VARCHAR列,其中包含与table2中的ID相关的逗号分隔ID(整数)列表。

上面的查询只返回一行,它应该返回table1.comma_separated_ids中每一行,其中table2中有一个匹配的行

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

1 个答案:

答案 0 :(得分:0)

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

您可以使用find_in_set()

SELECT *
FROM table1 LEFT JOIN
     table2
     ON find_in_set(table2.id, table1.comma_separated_ids)
WHERE table1.id = XXX;

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