0

既存の SQL データベースでアプリケーションを構築する必要があり、この状況に遭遇しました。

T1いくつかのフィールドが別のテーブル ( ) の値を参照するテーブル ( と呼びます) がありますT2。これは基本的に 2 つのフィールドだけで構成されていIdますName。結果として、T2は異なる性質と意味を持つデータを保持しますT1。これは、それに関連するフィールドが非常に異なる種類であるためです。(これは私には珍しいデザインのようです。)

私の質問: この設計では、各フィールドにT2.Name関連する値を取得するために結合クエリを作成する方法を教えてください。T1

編集

フィールドごとに 1 つのクエリを実行することで、必要なものを取得できます。

SELECT t2.name AS name1
FROM t1
INNER JOIN t2
ON t1.field1 = t2.id;

SELECT t2.name AS name2
FROM t1
INNER JOIN t2
ON t1.field2 = t2.id;

SELECT t2.name AS name3
FROM t1
INNER JOIN t2
ON t1.field3 = t2.id;

しかし、これはナンセンスです。では、これらすべてを 1 つのクエリにまとめるにはどうすればよいでしょうか。

4

4 に答える 4

1

対応する名前を取得するには、参照を t2 にエイリアスする必要があります。

SELECT alias1.name AS name1,
       alias2.name AS name2,
       alias3.name AS name3
  FROM t1
 INNER JOIN t2 alias1
    ON t1.field1 = alias1.id
 INNER JOIN t2 alias2
    ON t1.field2 = alias2.id
 INNER JOIN t2 alias3
    ON t1.field3 = alias3.id;

外部キーが null 可能である場合は、内部結合を左結合に置き換えることができます。

于 2012-08-27T11:34:08.873 に答える
0

参加にORを使用できない理由はありますか?それで:

SELECT t2.name AS name3
FROM t1, t2
WHERE t1.field1 = t2.id
OR t1.field2 = t2.id
OR t1.field3 = t2.id;

何らかの理由でできない場合はUNION、すべてのクエリの結果を1つのクエリにまとめるために使用できます。どのRDBMSを使用しているかはわかりませんが、postgresについては、 http ://www.postgresql.org/docs/8.3/static/queries-union.htmlで情報を見つけることができます。

その他の場合は、DBMS名と「UNION」をすばやくグーグルで検索すると、必要なものが得られます。

于 2012-08-27T11:05:39.820 に答える
0

このようなことを試して、

SELECT t2.name AS name1
(t1.field1 = t2.id の場合は 'Type1'、t1.field2=t2.id の場合は 'Type2'、そうでない場合は 'Type3' end) as Type
FROM t1
INNER JOIN t2 ON t1.field1 = t2.id
または t1.field2=t2.id
または t1.field3=t2.id

于 2012-08-27T11:29:39.090 に答える
0

テーブル構造を見なくても、次のようなことができます。

SELECT t1.col1, 
    t1.col2, 
    t1.id as t1_id, 
    t2.id as t2_id, 
    t2.name as t2_name
FROM t1
INNER JOIN t2
    ON t1.id = t2.id

テーブルを結合しているので、両方のテーブルに表示される列に異なるエイリアスを与えるだけです。

更新に基づいて、これら 3 つのクエリを 1 つに統合できるはずです。

SELECT t2.name AS name1
FROM t1
INNER JOIN t2
    ON t1.field1 = t2.id
    OR t1.field2 = t2.id
    OR t1.field3 = t2.id
于 2012-08-27T10:43:59.393 に答える