gpt4 book ai didi

mysql - 连接(?)或联合(?)两个表中两列的值,填充空白

转载 作者:行者123 更新时间:2023-11-30 00:24:55 25 4
gpt4 key购买 nike

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

我的 SQL 能力并不差,但这相当棘手。我尝试了一些方法,但说实话,我不知道从哪里开始。

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

我现实生活中的例子是,Table A 包含一个概念列表,每个概念都有一个术语,Table B 提供了 中概念术语的同义词表A

我需要将术语和同义词(但不是串联)合并到一列中,然后在单独的列中计算合并术语的长度。最后,该记录将用于创建一个具有单个联合、索引和可搜索列的 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_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 |
+------+-------+-------+-----------+----------------+

我有一种感觉,我会为这个语法而苦苦挣扎。但对我来说,困难的问题就是执行这个 JOIN(我认为)。

希望有人能帮忙!这有点超出我的范围了......

非常感谢!

亨里克

最佳答案

试试这个,

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

<强> DEMO LINK

请澄清一下,您的 len 列的逻辑,我认为我给出的并不是您对 len 列的要求。

关于mysql - 连接(?)或联合(?)两个表中两列的值,填充空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22960851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com