MYSQL子集操作

时间:2011-05-25 08:48:40

标签: mysql sql

有没有办法实现类似的目标:

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

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

2 个答案:

答案 0 :(得分:5)

根据您的伪代码,我想您要检查(动态)值列表是否是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

答案 1 :(得分:0)

可能是一种原始方法,但我想你可以这样做:

WHERE value1 IN (SELECT value FROM tb_value WHERE isgoodvalue = true) OR value2 IN (...) ...