0

我试图想出一个映射问题的解决方案,在这个问题中我可以将两个看似不相关的组联系起来。因此,假设我有一组属性 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 中共享相同的属性。所以,如果属性 I 'm storage 是一个地址,我希望能够选择第 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 中的元素具有相同地址的每个元素返回一行(以及该地址是什么)。

4

1 回答 1

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,
  • ...

A:

  • 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;
于 2013-01-30T06:41:12.007 回答