我有三个表table1,table2和表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
需要输出:
Table4 C1 ----- 1 2 3 4 5 11_1 11_2 12 13 14_1 14_2 14_3 15 16
感谢您的帮助
答案 0 :(得分: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 |
答案 1 :(得分: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让这种东西很好!:))
马特
答案 2 :(得分: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语句完成:
INSERT INTO table4 (c1)
SELECT t1.c1
FROM ...