我需要一些SQL查询的帮助。另一个要求是它必须适用于mysql,它不支持FULL OUTER JOIN(如果这确实是答案的一部分)。
我在SQL上并不可怕,但这非常棘手。我已经尝试了一些事情,但说实话,我不知道从哪里开始。
本质上,我想在两个不同的表中联合两列的值:但是这两个表有不同的行数,其中表A的行数多于表B.对于表B中缺少的列,我想要使用表A中我链接到的行中的值填充。
我的真实例子是,Table A
包含一个概念列表,每个概念都包含一个术语,而Table B
包含Table A
中概念术语的同义词。 / p>
我需要将术语和同义词(但不是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_c
和col_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 |
+------+-------+-------+-----------+----------------+
我有一种感觉,我会为这个语法而努力。但对我来说,困难的问题就是这样做(我想)。
希望有人可以帮忙!这有点超出我的范围......
非常感谢!
的Henrik
答案 0 :(得分:0)
试试这个,
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列的LOGIC,我认为不要认为我给出的是你对len列的要求。