0

関係のないように見える 2 つのグループを関連付けることができるマッピングの問題の解決策を考えています。したがって、一連の属性 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 で同様のことを行うことができます。実際にクエリしようとしているのは、グループ 1 と 2 の要素が A で同じ属性を共有する A から 2 および A から 1 です。保存するのはアドレスです。アドレスを共有するグループ 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]

そして、目標は、t2 の要素と同じアドレスを持つ t1 のすべての要素 (およびそのアドレスが何であるか) に対して返される行を取得することです。

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

したがって、次のように取得します。

そして、目標は、t2 の要素と同じアドレスを持つ t1 のすべての要素 (およびそのアドレスが何であるか) に対して返される行を取得することです。

次に、これを行うことができます:

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 に答える