我想在MySql上创建where子句。我在数据库中有一列,其中包含用逗号(2,5,6,8)隔开的ID列表。我需要测试每个ID是否在另一个ID列表中。如果我只有一个要测试的ID(而不是列表),我知道如何使用“ where IN”子句。那么,如何测试另一个ID列表中是否存在ID列表?
答案 0 :(得分:3)
SQL中没有“ ID列表”之类的东西。您所拥有的是一个字符串,它恰好包含数字和逗号。
如果只需要像字符串一样使用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)
答案 1 :(得分:0)
感谢所有提示,我认为这是准备就绪的功能。我是SQL新手。但是由于不可能直接进行列表测试,因此我将使用另一个表将两个ID分开存储进行测试。