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

qpgpyjmq  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(241)

我有两张table: rules 以及 measure_units . 规则有许多度量单位,度量单位有许多规则。所以我们有一个连接表 rule_id 以及 measure_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兼容的查询。
这里有一把小提琴:https://www.db-fiddle.com/f/vxg6vyjpsyjqn7sn83jlei/1 在何处尝试查询。

b91juud3

b91juud31#

我将提取规则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 table。

相关问题