繁体   English   中英

两张表中两列的Joining(?)或unionion(?)值,填入空白

[英]Joining(?) or unioning(?) values from two columns in two tables, filling in the blank

我需要有关SQL查询的帮助。 另一个要求是它必须在不支持FULL OUTER JOIN的mysql上运行(如果确实是答案的一部分)。

我在SQL方面并不糟糕,但这非常棘手。 我已经尝试了一些方法,但是老实说,我不确定从哪里开始。

本质上,我想合并两个不同表中两列的值:但是两个表具有不同的行数,其中表A比表B具有更多的行。对于表B中缺少的列,我想用我链接到的表A中的行中的值。

我的现实生活示例是, Table A包含概念的列表,每个概念都有一个术语,而Table BTable A的概念的术语提供同义词。

我需要将术语和同义词(而不是concat)合并到一个列中,然后在单独的列中计算合并的术语的长度。 最后,该记录将用于创建具有单个,联合,索引和可搜索列的Solr文档。 然后,我将根据最短的术语或同义词对我的查询进行排序(因此,长度列)。

但是,让我们简化一下,并尝试提出一个严格定义的问题陈述。 跑步前走:-)

我有两个表:

Table A
+----+-------+-------+-------+
| ID | Col_a | Col_b | Col_c |
+----+-------+-------+-------+
| 1  |   a0  |   b0  |   c0  |
| 2  |   a1  |   b1  |   c1  |
| 3  |   a2  |   b2  |   c2  |
+----+-------+-------+-------+


Table B
+----+------+-------+
| ID | A_ID | col_d |
+----+------+-------+
| 10 |   1  |  d0   |
| 11 |   1  |  d1   |
| 12 |   2  |  d2   |
| 13 |   2  |  d3   |
| 14 |   2  |  d4   |
| 15 |   3  |  d5   |
| 16 |   3  |  d6   |
+----+------+-------+


从这两个表中,我需要生成这些记录( col_ccol_dcol_d ,填充表A中的所有行):

Table Result:

+------+-------+-------+-----------+
| A_ID | col_a | col_b | col_union |
+------+-------+-------+-----------+
|    1 | a0    | b0    | c0        |
|    1 | a0    | b0    | d0        |
|    1 | a0    | b0    | d1        |
|    2 | a1    | b1    | c1        |
|    2 | a1    | b1    | d2        |
|    2 | a1    | b1    | d3        |
|    2 | a1    | b1    | d4        |
|    3 | a2    | b2    | c2        |
|    3 | a2    | b2    | d5        |
|    3 | a2    | b2    | d6        |
+------+-------+-------+-----------+


我还需要找到col_union的长度,并将其返回到另一列中:

Table Result (with length):

+------+-------+-------+-----------+----------------+
| A_ID | col_a | col_b | col_union | len(col_union) |
+------+-------+-------+-----------+----------------+
|    1 | a0    | b0    | c0        | len_c0         |
|    1 | a0    | b0    | d0        | len_d0         |
|    1 | a0    | b0    | d1        | len_d1         |
|    2 | a1    | b1    | c1        | len_c1         |
|    2 | a1    | b1    | d2        | len_d2         |
|    2 | a1    | b1    | d3        | len_d3         |
|    2 | a1    | b1    | d4        | len_d4         |
|    3 | a2    | b2    | c2        | len_c2         |
|    3 | a2    | b2    | d5        | len_d5         |
|    3 | a2    | b2    | d6        | len_d6         |
+------+-------+-------+-----------+----------------+

我有一种为这种语法而奋斗的感觉。 但是,对我而言,一个棘手的问题就是这样做(我认为)。

希望有人能帮忙! 这超出了我。

非常感谢!

亨里克

尝试这个,

Select ID,col_a,col_b,col_union, 'Len_' + col_union,Length(col_union) as Ln from 
(
Select ID,col_a,col_b,Col_c as col_union from myUnionA 
Union All
Select A_ID,a.col_a,a.col_b,Col_d as col_union from  myUnionb  as b
inner join myUnionA as a on  a.ID = b.A_ID
)a
order by ID,col_union

演示链接

请澄清一下,您的len列的逻辑,我想我认为您提供的len列的要求不对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM