0

我有三个表 table1、table2 和 table 3。我正在将数据获取到一个文件,其输出顺序如下所示。我想将该文件中的数据附加到无法使用 Java 创建和持久化的 table4 中。

场景:我希望这三个表中的所有数据都放在一个 cloumn 中,其中 table2 元素与C4中的 table3 元素匹配,然后我想用C5中的相应数据替换那个匹配的元素,而不是那个匹配的元素。例如,在下面提到的表格中,我们看到 table2 中的 11 与 C4 列的 table3 匹配。那么输出应该有 11_1、11_2 而不是 11。

需要帮助

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

这应该有效:

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 

结果

| 色彩 |
--------
| 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

这将从表 3 中获取与 Table3.C4 匹配到 Table2.C1 的所有内容。它返回 ROWS:

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

我只在这里很短的时间,我一直看到人们希望 ROWS 在 COLUMNS 中返回的问题。SQL 返回匹配的 ROWS,而不是 COLUMNS。上面的 SQL 语句将列出数据如下:

11_1
11_2
:
:

如果您希望将 rws 转换为列,请使用您选择的语言进行操作。(Python 让这种事情变得很好!:))

马特

于 2013-02-01T01:42:22.763 回答
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

SQL Fiddle 演示

目的是使用此结果集填充另一个表,这可以通过 SQL 语句完成:

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