0

データを含むテーブルを作成したいのですが、列の1つを別のテーブルのデータ(外部キーなど)にしたいのですが、この種のデータベースの整合性は必要ありません。テーブルの値を取得したいだけです。 b表aに表示されます。

質問:上記のように部分的なビューを作成する方法はありますか?

前もって感謝します。

SQLコード:

CREATE TABLE table1 (
data_column_1 int(10)
data_column_2 int(10)
data_column_3 int(10)
view_column_2 varchar(250)
/* from on table 2
   updated with a trigger? that reads data_column_2
   and based on the value in data_column_2, updates the value in view_column_2
   (like a vlookup like in excel)]
*/
view_column_3 varchar(250)
/* from on table 3
   updated with a trigger? that reads data_column_3
   and based on the value in data_column_3, updates the value in view_column_3
   (like a vlookup like in excel)
*/
)
4

1 に答える 1

1

私が正しいと理解している場合は、2つの参照テーブルと1つのSELECTwithが必要JOINです。3つのテーブルのステートメントCREATE TABLEは次のようになります

CREATE TABLE table1 (
    data_column_1 int(10),
    data_column_2 int(10),
    data_column_3 int(10)
);
CREATE TABLE table2 (
    data_column_2 int(10),
    view_column_2 varchar(250)
);
CREATE TABLE table3 (
    data_column_3 int,
    view_column_3 varchar(250)
);

以下のサンプルデータがあると仮定しましょう

table 1
------------
10    1    3
20    2    2
30    3    1

table2
------------
1    Apple
2    Banana
3    Orange

table3
------------
1    Red
2    Green
3    Yellow 

次に、これSELECTはあなたが望むものを与えるでしょう

SELECT t1.data_column_1,
       t1.data_column_2,
       t1.data_column_3,
       t2.view_column_2,
       t3.view_column_3
  FROM table1 t1 LEFT JOIN
       table2 t2 ON t1.data_column_2 = t2.data_column_2 LEFT JOIN
       table3 t3 ON t1.data_column_3 = t3.data_column_3

LEFT JOINdata_column_2とdata_column_3のすべての値が、table2.view_column_2とtable3.view_column3にそれぞれ参照値があるわけではないと仮定して使用します。参照テーブルに常にそれぞれの値がある場合、またはそれらを持たない値を結果セットから除外する場合は、INNER JOIN代わりに使用してください。

出力:

+---------------+---------------+---------------+---------------+---------------+
| data_column_1 | data_column_2 | data_column_3 | view_column_2 | view_column_3 |
+---------------+---------------+---------------+---------------+---------------+
|            10 |             1 |             3 | Apple         | Yellow        |
|            20 |             2 |             2 | Banana        | Green         |
|            30 |             3 |             1 | Orange        | Red           |
+---------------+---------------+---------------+---------------+---------------+

必要に応じて、ビューでまとめることができます

CREATE VIEW consolidated_table
AS
SELECT t1.data_column_1,
       t1.data_column_2,
       t1.data_column_3,
       t2.view_column_2,
       t3.view_column_3
  FROM table1 t1 LEFT JOIN
       table2 t2 ON t1.data_column_2 = t2.data_column_2 LEFT JOIN
       table3 t3 ON t1.data_column_3 = t3.data_column_3

そして、このように使用します

SELECT * 
  FROM consolidated_table
 WHERE data_column_1 < 20

出力:

+---------------+---------------+---------------+---------------+---------------+
| data_column_1 | data_column_2 | data_column_3 | view_column_2 | view_column_3 |
+---------------+---------------+---------------+---------------+---------------+
|            10 |             1 |             3 | Apple         | Yellow        |
+---------------+---------------+---------------+---------------+---------------+
于 2013-02-27T08:09:16.480 に答える