0

複数の JOIN に関する多くの投稿を見てきましたが、私の場合は役に立ちませんでした。

3 つのテーブルと 2 つの相互参照テーブルがあるとします。これは、複数のテーブルがあり、FROM に相互参照テーブルが 1 つある他の投稿との違いです。

Table1 -> cross-ref1 <- table2 -> cross-ref2 <- table3

私のPostgresqlのバージョンは9.0.11で、W7 64ビットで作業しています。

私のリクエストは次のものです:

Select [columns] from cross-ref1, cross-ref2

INNER JOIN table1 ON table1.id_table1=cross-ref1.ref_id_table1

INNER JOIN table2 ON table2.id=cross-ref1.ref_id_table2

INNER JOIN table2 On table2.id_table2=cross-ref2.ref_id_table2

INNER JOIN table3 ON table3.id_table3=cross-ref2.ref_id_table3

エラー メッセージは次のとおりです。「テーブル名が複数回指定されています。」

エラーについて説明してもらえますか?

ありがとう

4

3 に答える 3

1

同じテーブル名を 2 回使用することはできません (table2)。この場合、t1、t2a、t2b などのエイリアスを使用する必要があります。

SELECT
    ...
FROM
   table1 AS t1
   INNER JOIN table2 AS t2a
      ON t2a.id= ...
   INNER JOIN table2 AS t2b
      ON t2b.id= ...
   INNER JOIN table3 AS t3
      ON t3.id= ...
   ...

いつでも、何回でも参加できます。

于 2013-10-01T11:06:53.460 に答える
0

どのような結果を得たいのかを説明する必要があります。たとえば、次の SQL は構文の観点からは有効ですが、ビジネスの観点からはわかりません。

-- this will create sample data with 5 tables
with 
crossref1(ref_id) as (VALUES (1),(2),(3)),
crossref2 (ref_id) as (VALUES (2),(3),(4)),
table1 (ref_id) as (VALUES (3),(4),(5)),
table2 (ref_id) as (VALUES (1),(2),(3)),
table3 (ref_id) as (VALUES (1),(2),(3))


-- valid SQL based on your example
select * from 
crossref1  
cross join crossref2
join table1 on table1.ref_id=crossref1.ref_id
join table2 as t2_1 on t2_1.ref_id=crossref1.ref_id
join table2 as t2_2 on t2_2.ref_id=crossref2.ref_id
join table3 on table3.ref_id=crossref2.ref_id

SQL には 2 つの問題があります。

  • table2 への参照が 2 つあり、エイリアスを追加する必要があります
  • cross join代わりに構文を使用する必要があります,

仕組み (サンプル データの作成方法)を理解したい場合はwith、PostgreSQL にこれに関する優れたドキュメントがあります。

于 2013-07-26T07:18:45.307 に答える