有没有办法实现以下目标:
SELECT * FROM tb_values WHERE (value1, value2, value3) SUBSET_OF ( SELECT value FROM tb_value WHERE isgoodvalue = true )
更多信息: 我有一个称为项目的表。每个项目都有标签。一个标签可以被多个项目共享。有一个名为projectTagMap的映射表。现在,用户可以使用标签来过滤项目。使用UI上的复选框选择标签。因此,用户选择几个标签来过滤项目。应该从包含用户选择的所有标签的项目表中选择项目。
从您的伪代码中,我猜您想检查一个(动态)值列表是否为所提供的另一个列表的子集SELECT。如果是,则将显示整个表格。如果没有,则不会显示任何行。
SELECT
这是实现该目标的方法:
SELECT * FROM tb_values WHERE ( SELECT COUNT(DISTINCT value) FROM tb_value WHERE isgoodvalue = true AND value IN (value1, value2, value3) ) = 3
*OP解释后 *更新 :
SELECT * FROM project JOIN ( SELECT projectid FROM projectTagMap WHERE isgoodvalue = true AND tag IN (tag1, tag2, tag3) GROUP BY projectid HAVING COUNT(*) = 3 ) AS ok ON ok.projectid = project.id