选择SQL中两列之间的关系

Posted

技术标签:

【中文标题】选择SQL中两列之间的关系【英文标题】:Select relation between two columns in SQL 【发布时间】:2017-03-19 05:21:51 【问题描述】:

我想在 Column2 关系值上选择 Data3Column2.Data3Column1.Data2_005 的关系。Column1.Data2_005 包含 Column2.Data2Column1.Data1_001 包含Column2.Data1。 如果column1 不包含column2,则结束循环。这是我的输出。

【问题讨论】:

请正确解释。你的问题目前还不清楚 @vivek nuna。我想要基于 column2 的给定数据的关系是什么。 【参考方案1】:

您似乎想在表格中递归查找包含在先前Column1 值中的Column2 值。您可以使用公用表表达式来执行此操作;

WITH cte(Column1, Column2) AS (
  SELECT Column1, Column2 FROM test t WHERE Column2='Data3'
  UNION ALL
  SELECT t.Column1, t.Column2 FROM test t 
  JOIN cte 
    ON CHARINDEX(t.column2, cte.Column1) > 0
)
SELECT * FROM cte;

>>>

Column1     Column2
Data2_005   Data3
Data1_001   Data2
GML1        Data1

第一个选择找到基本情况(Column2 等于 Data3 的行)。

第二个选择与 cte 本身连接,在这种情况下包含前一行,因此您可以匹配前一个 Column1 值以查找下一行。

注意循环(例如,Data3_001 + Data3 的行将导致查询失败)

【讨论】:

非常感谢,它工作得很好,但我在这个查询中遇到了一些递归错误。 "语句终止。在语句完成之前,最大递归 100 已用完。"【参考方案2】:

其他风味:

create table #temp (column1 nvarchar(20), column2 nvarchar(20))
insert into #temp values
('GML1', 'Data1'), 
('Data1_001', 'Data2'), 
('Data2_005', 'Data3'), 
('GML2', 'Data10'),
('Data10_001', 'Data11'), 
('Data10_005', 'Data12')


;with cte
as
(
select column1, column2 from #temp where column2='Data3'
union all
select a.column1, a.column2 from #temp a join cte b on a.column2 = SUBSTRING(b.column1, 0, Len(b.column2)+1)
)
select * from cte order by column2

【讨论】:

以上是关于选择SQL中两列之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

mysql中两列之间的区别

excel中两列都有重复值,怎样筛选出两列唯一值?

怎么将excel中两列转换成多行多列

用LINQ将select中两列的结果合并到一个数组中?

怎么样在Excel中两列数据选为数据源来创建图表

删除颤振中两列之间的空间