多边的多对多关系

时间:2013-01-30 06:34:15

标签: sql

我正在考虑解决映射问题,我可以将两个看似无关的组联系起来。所以,假设我有一组属性,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中的元素具有相同的地址(以及该地址是什么)。

1 个答案:

答案 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;