Mysql 如何测试另一个ID列表中是否存在ID列表?

Mysql 如何测试另一个ID列表中是否存在ID列表?,mysql,sql,Mysql,Sql,我想在MySql上创建一个where子句。我在DB中有一列,列中的ID列表用逗号(2,5,6,8)分隔。我需要测试这些ID是否都在另一个ID列表中。如果我只有一个id要测试(不是列表),我知道如何处理“where IN”子句。那么,如何测试另一个ID列表中是否存在ID列表?SQL中没有“ID列表”这样的东西。您拥有的是一个字符串,它恰好包含数字和逗号 如果只需要像字符串一样使用id列表,则可以将其存储为字符串。但是,如果需要执行将列表视为一组离散id值的查询,则应该通过在依赖表中每行存储一个id

我想在MySql上创建一个where子句。我在DB中有一列,列中的ID列表用逗号(2,5,6,8)分隔。我需要测试这些ID是否都在另一个ID列表中。如果我只有一个id要测试(不是列表),我知道如何处理“where IN”子句。那么,如何测试另一个ID列表中是否存在ID列表?

SQL中没有“ID列表”这样的东西。您拥有的是一个字符串,它恰好包含数字和逗号

如果只需要像字符串一样使用id列表,则可以将其存储为字符串。但是,如果需要执行将列表视为一组离散id值的查询,则应该通过在依赖表中每行存储一个id来规范化数据

CREATE TABLE IdSets (
  entity_id INT NOT NULL,
  item_id INT NOT NULL,
  PRIMARY KEY (entity_id, item_id),
  FOREIGN KEY (entity_id) REFERENCES entities(entity_id)
);
然后您可以通过
JOIN
查询解决您的问题

SELECT i.entity_id
FROM IdSets AS i LEFT OUTER JOIN TestSets AS t USING (item_id)
GROUP BY entity_id
HAVING COUNT(i.item_id) = COUNT(t.item_id)

感谢所有的提示,我认为这是一个现成的功能。我是SQL新手。但是,由于无法直接进行列表测试,我将使用另一个单独存储这两个ID的表来进行测试。

您的问题是有一个包含数字ID列表的字符串列。这不是存储此类数据的正确方法。在SQL中迭代逗号分隔的值非常困难。如果确实必须使用该格式,则可能需要编写带有循环的存储过程。请参阅
FIND\u IN\u SET()
函数。您有权更改数据库设计吗?如果数据存储正确,这是一个小问题。感谢所有提示,我认为这是一个现成的函数。我是SQL新手。但由于无法直接进行列表测试,我将使用另一个分别存储两个ID的表进行测试。Downvoter,请解释为什么这是一个不正确的答案。这应该是一个注释,它实际上并不能解决问题。解决方法是规范化数据。有时你没有那么奢侈,您被现有的数据库架构卡住了。您知道
FIND\u IN\u SET()
函数,对吗?虽然它不是最优的,但它确实允许搜索逗号分隔的字符串。