确定是否存在多对多记录组合
|
使用简单的解决方案似乎将是一项常见任务,但是我在StackOverflow和Google上都是空手而归。
场景是这样的:我有两个表A和B,它们共享多对多关系。因此,我有带有外键的表A_B,该表映射了A到B的记录关系。标准的东西。
我想弄清楚的是,如果已经存在匹配的相同关系,则在输入新记录(一个\'A \'记录和一个或多个\'B \'记录)之前如何查询表。目标是不重复数据。
最后,这些表将变得非常大,因此我需要尽可能降低开销。
更新
下面是我正在尝试的示例查询,以确定是否存在映射到B_id值3、4和5的现有A记录。它可以工作,但是如果有两个跨越3、4的不同A_id值,则返回假阳性。和5,例如:
A_id = 1,B_id值= 2,3
A_id = 2,B_id值= 4,5,6
SELECT A_id, B_id
FROM A_B
GROUP BY
A_id HAVING
B_id IN (3,4,5)
AND
COUNT(*) = 3
LIMIT 1
更新2
A_B表的主键是包含A_id和B_id的复合键。
A_B表定义一个唯一的组合键,包括A_id和B_id。
单个A由一个或多个B组成。
解决这个问题的一种更通用的方式:给定一组有限的B id值,我需要确定是否存在一个由该精确的B组组成的现有A。如果不是,则使用该组B创建新的A。
干杯
没有找到相关结果
已邀请:
3 个回复
良阑纠苫
这将产生一个b_id列表,您不能再次插入...或一个空结果(所有条目都是新的)。
街茬
很显然,您将不得不用实际值以及A的搜索参数替换表名和列名。
惭法搽
不需要子查询,可以通过在A_B表上添加复合索引A_id_B_id进行优化。 感谢参加会议的参与者,他们最终引导我朝着正确的方向前进。 干杯