我正在考虑解决映射问题,我可以将两个看似无关的组联系起来。所以,假设我有一组属性,A,一个实体组1和一个实体组2.我可以很容易地在1和A之间建立多对多关系并进行查询,如
select * from 1
inner join a_1 on a_1.1_id = 1.id
inner join a on a.id = a_1.a_id
where a.attr = '123'
我显然可以做一些与A相关的东西2.我试图实际查询的是A到2和A到1,其中组1和2中的元素在A中共享相同的属性。所以,如果我正在存储的属性是一个地址,我希望能够选择分享地址的组1和组2中的所有人,以及这些地址是什么。
感谢帮助!
编辑:
表格结构:
t1 -----< t1_A >------ A ------< t2_A >------ t2
t1[id, other], t1_A[id, t1id, Aid], A[id, address], t2_A[id, t2id, Aid], t2[id, other]
目标是为t1中的每个元素返回一行,该元素与t2中的元素具有相同的地址(以及该地址是什么)。
答案 0 :(得分:1)
查询是A到2和A到1,其中组1和2中的元素 在A。中共享相同的属性。
我认为您正在寻找UNION
:
select address, ... -- and other properties
from table1 t1
inner join a on a.a_id = t1.id
where a.attr = '123'
UNION ALL
select address, ... -- and other properties
from table2 t2
inner join a on a.a_id = t2.id
where a.attr = '123'
<强>更新强>
在更新问题后考虑表的结构:
<强> T1:强>
id
,<强> t1_A:强>
id
,t1id
,Aid
,答强>
id
,address
,<强> t2_A:强>
id
,t2id
,Aid
,<强> T2:强>
id
,所以,你想得到:
目标是为t1中的每个元素返回一行 与t2中的元素相同的地址(以及该地址是什么)。
然后你可以这样做:
SELECT
t1.*,
A.*
FROM t1
INNER JOIN t1_A ON t1.id = t1_A.t1id
INNER JOIN A ON A.id = t1_A.Aid
INNER JOIN t2_A ON a.id = t2_A.aid
INNER JOIN t2 ON t2.id = t2_A.t2id;