Sql 多方面多对多关系

Sql 多方面多对多关系,sql,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' 很明显,我可以用与2相关的A做类似的事情。我试图实际查询的是A到2和A到1,其中组1和组2中的元素在A中共享

我在想一个映射问题的解决方案,我可以把两个看似无关的组联系起来。假设我有一组属性,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'
很明显,我可以用与2相关的A做类似的事情。我试图实际查询的是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--------A--------t2
t1[id,其他],t1[id,t1id,Aid],A[id,地址],t2[id,t2id,Aid],t2[id,其他]
目标是为t1中与t2中的元素具有相同地址的每个元素返回一行(以及该地址是什么)

尽管查询是A到2和A到1,其中组1和组2中的元素 在A中共享相同的属性

我想你在找工会:

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\u A:

  • id
  • t1id
  • Aid
A:

  • id
  • 地址
t2\u 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;

啊,这看起来是在正确的道路上,但我实际上不想要where子句。我希望它返回t1中的所有项目、属性中的地址以及t2中与之相关的项目。因此,我希望t1和t2中的任何项目共享A中的任何属性(以及所有这些关系的外观)。@WilliamThurston好的,然后删除
WHERE
子句,也请您向我展示表的结构,以及哪些属性与一些示例数据相互关联?这将非常有帮助。thanks@WilliamThurston-请看我的编辑,希望这就是你要找的。试试看!我会让你知道的。感谢您的快速响应。效果很好,我在我的选择中添加了t2.*以获得两端。