根据与SQL中其他表的重合,来自同一字段的合并行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据与SQL中其他表的重合,来自同一字段的合并行?相关的知识,希望对你有一定的参考价值。

我尝试从表caracter上载字段t1时遇到问题。如果要在caracterfrase中显示该值,请与前一个值合并。例如,如果在t2中找到x,y或z,并且这些值出现在caracterfrase中,则我想将x,y和z与t2中的上一个值合并。

t1

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9TM3RNMy5wbmcifQ==” alt =“在此处输入图像说明”>“ >>

t2

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9weVp6Ny5qcGcifQ==” alt =“在此处输入图像描述”>

这应该是结果

t1

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS85Z2pHTi5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

我尝试了一个游标,但由于我在set处引用错误,因此无法正常工作,以前我尝试了while循环,但结果相同。

caracter

我在尝试从表t1上传田野角色时遇到问题。我想从caracter中获取该值,如果它在t2的frase中出现,则为先前的值。例如,如果找到x,y或...

希望这达到目的,您必须利用lead()聚合函数来获取下一行。您可以在带有表和记录的dbfiddle链接中找到完整的解决方案,以显示查询的工作方式。该解决方案适用于SQLSEVER 2019。 DECLARE @frase VARCHAR (100) DECLARE MICURSOR CURSOR FOR SELECT caracter FROM t1 OPEN MICURSOR FETCH NEXT FROM MICURSOR WHILE @@fetch_status = 0 BEGIN SELECT t1.caracter FROM t1 INNER JOIN t2 ON t2.frase LIKE CONCAT('%', t1.caracter,'%') UPDATE t1 SET caracter= 'caracter' + '(@frase-1)' FETCH NEXT FROM MICURSOR INTO @frase END CLOSE MICURSOR DEALLOCATE MICURSOR

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=71510d727bb04478383887e2e8ab3a52

应用脚本后的输出,

update t1 set t1.caracter = concat(t1.caracter,lg)
from
 (select id_val,ver,caracter,lead(caracter) over (order by id_val) lg from t1) tab,t1
 where lg in (select frase from t2)
 and tab.caracter = t1.caracter;

 delete from t1 where caracter in (select frase from t2);

select * from t1;

id_val  ver caracter
1   abc abc
1   abc 3
1   abc x
1   abc 2
1   abc y
2   def def
2   def 5
2   def y
2   def 9
2   def z
答案

希望这达到目的,您必须利用lead()聚合函数来获取下一行。您可以在带有表和记录的dbfiddle链接中找到完整的解决方案,以显示查询的工作方式。该解决方案适用于SQLSEVER 2019。 DECLARE @frase VARCHAR (100) DECLARE MICURSOR CURSOR FOR SELECT caracter FROM t1 OPEN MICURSOR FETCH NEXT FROM MICURSOR WHILE @@fetch_status = 0 BEGIN SELECT t1.caracter FROM t1 INNER JOIN t2 ON t2.frase LIKE CONCAT('%', t1.caracter,'%') UPDATE t1 SET caracter= 'caracter' + '(@frase-1)' FETCH NEXT FROM MICURSOR INTO @frase END CLOSE MICURSOR DEALLOCATE MICURSOR

以上是关于根据与SQL中其他表的重合,来自同一字段的合并行?的主要内容,如果未能解决你的问题,请参考以下文章

sql 用union合并合并查询结果

Bigquery SQL SELECT WHERE 字段包含来自其他表的许多单词

SQL 2012 将来自多个表的多个查询与连接和计数合并到一个表中

SQL 两张表合并 (两张表的列都相同)

根据来自两个不同表的字段对行进行排序

使用来自其他平面表的数据的 SQL 更新行