mysql子集输出,MYSQL子集操作

本文介绍如何使用SQL实现,根据用户选择的多个动态标签(value1, value2, value3),查询项目表(project)中包含所有这些标签的项目。通过projectTagMap表进行关联,当用户选定的标签集合是goodvalue=true项目的子集时,显示完整项目信息;否则,不显示任何结果。
摘要由CSDN通过智能技术生成

Is there a way to achieve something like:

SELECT *

FROM tb_values

WHERE (value1, value2, value3) SUBSET_OF

( SELECT value

FROM tb_value

WHERE isgoodvalue = true

)

More information:

I have a table called projects. Each project has tags. A tag can be shared by multiple projects. There is a mapping table called projectTagMap. Now users use tags to filter the projects. Tags are selected using checkboxes on the UI. So a user selects several tags to filter the projects. Am supposed to select the projects from projects table that contains all the tags selected by the user.

解决方案

From your pseudo code I guess that you want to check if a (dynamic) list of values is a subset of another list provided by a SELECT. If yes, then a whole table will be shown. If not, no rows will be shown.

Here's how to achieve that:

SELECT *

FROM tb_values

WHERE

( SELECT COUNT(DISTINCT value)

FROM tb_value

WHERE isgoodvalue = true

AND value IN (value1, value2, value3)

) = 3

UPDATED after OP's explanation:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值