小编典典

MYSQL子集操作

sql

有没有办法实现以下目标:

SELECT *
FROM tb_values
WHERE (value1, value2, value3) SUBSET_OF
    ( SELECT value
      FROM tb_value
      WHERE isgoodvalue = true
    )

更多信息:
我有一个称为项目的表。每个项目都有标签。一个标签可以被多个项目共享。有一个名为projectTagMap的映射表。现在,用户可以使用标签来过滤项目。使用UI上的复选框选择标签。因此,用户选择几个标签来过滤项目。应该从包含用户选择的所有标签的项目表中选择项目。


阅读 161

收藏
2021-04-28

共1个答案

小编典典

从您的伪代码中,我猜您想检查一个(动态)值列表是否为所提供的另一个列表的子集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
2021-04-28