0

表1、表2、表3の3つのテーブルがあります。以下に示すように、出力のシーケンスを使用してデータをファイルに取得しています。そのファイルに入ってくるデータを、Javaを使用して作成および永続化できないtable4に追加したいと思います。

シナリオ:この3つのテーブルのすべてのデータを1つのクロームにまとめ、table2要素がC4のtable3要素と一致するようにし、一致した要素の代わりに、その要素をC5の対応するデータに置き換えます。たとえば、以下の表では、表2の11が列C4の表3と一致していることがわかります。その場合、出力には11ではなく11_1、11_2が含まれるはずです。

必要なヘルプ

Table1:                  Table2:                          Table3:

C1                       C3                               C4        C5
-----                    ------                           ------    -------
1                        11                               11        11_1
2                        12                               11        11_2
3                        13                               14        14_1
4                        14                               14        14_2
5                        15                               14        14_3
                         16                               null      null 

私が働いたコード:

SELECT c1 
FROM   (SELECT c1 
        FROM   table1 
        UNION ALL 
        SELECT c3 
        FROM   table2 
        UNION ALL 
        SELECT c5 
        FROM   table3) temp 

このクエリは私にすべてをフェッチします:(

SELECT C1 FROM(SELECT DISTINCT C1 AS C1 FROM table1 UNION ALL SELECT DISTINCT C2 FROM table2)AS 
temp LEFT JOIN table3 ON .temp.C1=table3.C4 CASE WHEN table3.C4=NULL THEN temp.C1 ELSE table3.C5

必要な出力:

表4
C1
-----
1
2
3
4
5
11_1
11_2
12
13
14_1
14_2
14_3
15
16

ヘルプをいただければ幸いです

4

3 に答える 3

0

これにより、Table3.C4からTable2.C1に一致する表3のすべてが取得されます。ROWSを返します。

SELECT C5
FROM Table3
LEFT JOIN Table2 ON Table2.C3 = Table3.C4

私はここにいるのはほんの短い時間であり、人々が列にROWSを返すことを望んでいる質問を一貫して見ています。SQLは、COLUMNSではなく、一致するROWSを返します。上記のSQLステートメントは、次のようにデータをリストします。

11_1
11_2
:
:

rwsを列に変換する場合は、選択した言語で行います。(Pythonはこの種のものを素晴らしいものにします!:))

マット

于 2013-02-01T01:42:22.763 に答える
0

これは機能するはずです:

SELECT col 
FROM   (SELECT c1 AS col 
        FROM   table1 
        UNION ALL 
        SELECT CASE 
                 WHEN t3.c4 IS NULL THEN t2.c3 
                 ELSE t3.c5 
               end AS col 
        FROM   table2 t2 
               LEFT JOIN table3 t3 
                      ON t3.c4 = t2.c3) temp 

結果

| COL |
--------
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 11_1 |
| 11_2 |
| 12 |
| 13 |
| 14_1 |
| 14_2 |
| 14_3 |
| 15 |
| 16 |

デモを見る

于 2013-02-01T01:36:42.830 に答える
0

これにより、指定された出力が生成されますが、行の順序は決定論的ではありません。

SELECT t1.c1
  FROM table1 t1
 UNION ALL
SELECT IFNULL(t3.c5,t2.c3)
  FROM table2 t2
  LEFT
  JOIN table3 t3
    ON t3.c4 = t2.c3

指定された順序で行を取得するには、さらに作業を行う必要があります。前のクエリで返された「重複」がなく、重複が削除される可能性がない場合は、次のようにします。

SELECT t1.c1
  FROM table1 t1
 GROUP BY t1.c1
 UNION ALL
SELECT IFNULL(t3.c5,t2.c3)
  FROM table2 t2
  LEFT
  JOIN table3 t3
    ON t3.c4 = t2.c3
 GROUP
    BY t2.c3
     , t3.c5

SQLFiddleデモ

目的は、別のテーブルにこの結果セットを入力することです。これは、SQLステートメントで実行できます。

INSERT INTO table4 (c1)
SELECT t1.c1
  FROM ... 
于 2013-02-01T01:46:10.070 に答える