你能帮我写一下我的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中有一个匹配的行
我实际上要做的事情有点复杂,但很难解释,所以我从这里开始。有什么帮助吗?
答案 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更糟糕。