gpt4 book ai didi

mysql - 选择具有完全相同的多对多关联的记录

转载 作者:行者123 更新时间:2023-11-29 09:57:16 28 4
gpt4 key购买 nike

我有 2 个表:rulesmeasure_units。一个规则有很多measure_units,一个measure_unit 有很多规则。因此,我们有一个包含 rule_idmeasure_unit_id 的联接表。

现在,给定一个规则,我想选择具有完全相同相同度量单位的所有规则。

rule1 => grams
rule2 => grams,meters
rule3 => grams,meters,litre
rule4 => meters
rule5 => grams,meters
rule6 => litre,grams

给定规则 2(包含克和米),我需要选择规则 2 和 5。

我的尝试是:

SELECT `rules`.* FROM `rules`
LEFT JOIN `measurables` ON `measurables`.`rule_id` = `rules`.`id`
LEFT JOIN `measure_units` ON `measure_units`.`id` = `measurables`.`measure_unit_id`
WHERE `measure_units`.`id` IN (1,2)
GROUP BY `measurables`.`rule_id`
HAVING (count(*) = 2)

但是此查询不起作用,因为选择至少具有 ID 1 和 2 的度量单位的所有规则。规则 3 也是如此。

可能是与 MySQL 兼容的查询。

这里有一个数据库 fiddle :https://www.db-fiddle.com/f/vxg6vYjpSYJqN7sn83JLei/1在哪里尝试查询。

最佳答案

我会提取规则 2 的单位并将其与所有其他规则进行比较。 MySQL 使用 group_concat 使这一切变得简单:

select r.*
from (select m.rule_id,
group_concat(m.measure_unit_id order by measure_unit_id) as measure_unit_ids
from measurables m
group by m.rule_id
) r join
(select group_concat(m.measure_unit_id order by measure_unit_id) as measure_unit_ids
from measurables m
where m.rule_id = 2
) r2
on r.measure_unit_ids = r2.measure_unit_ids

如果您需要有关规则的更多信息,可以加入rules表。

关于mysql - 选择具有完全相同的多对多关联的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53628760/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com