选择SQL中两列之间的关系
Posted
技术标签:
【中文标题】选择SQL中两列之间的关系【英文标题】:Select relation between two columns in SQL 【发布时间】:2017-03-19 05:21:51 【问题描述】:我想在 Column2
关系值上选择 Data3
。 Column2.Data3
与 Column1.Data2_005
的关系。Column1.Data2_005
包含 Column2.Data2
。 Column1.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中两列之间的关系的主要内容,如果未能解决你的问题,请参考以下文章