在接下来的一对多
CREATE TABLE source(id int, name varchar(10), PRIMARY KEY(id)); CREATE TABLE params(id int, source int, value int);
其中params.source是source.id的外键
INSERT INTO source values(1, 'yes'); INSERT INTO source values(2, 'no'); INSERT INTO params VALUES(1,1,1); INSERT INTO params VALUES(2,1,2); INSERT INTO params VALUES(3,1,3); INSERT INTO params VALUES(4,2,1); INSERT INTO params VALUES(5,2,3); INSERT INTO params VALUES(6,2,4);
如果我有一个参数值列表(例如[1,2,3]),如何在SQL中找到所有具有列表中所有值的源(源1,“是”)?
谢谢
编辑已 修改,以处理给定源可能多次出现该值的情况。
试试这个:
SELECT * FROM source WHERE ( SELECT COUNT(DISTINCT value) FROM params WHERE params.source = source.id AND params.value IN (1, 2, 3) ) = 3
您也可以将其重写为GROUP BY:
SELECT source.* FROM source INNER JOIN params ON params.source = source.id WHERE params.value IN (1, 2, 3) GROUP BY source.id, source.name HAVING COUNT(DISTINCT params.value) = 3