T-SQL-查找具有一个列值的行与另一列的多个值出现相关联。
目标是查找存在table1.col2多个值的table1.col1值。 (注意:两个表中的值都不是固定的,例如我们不是在搜索“ ABC”之类的模式,而必须是一个特定值。)
({Group by
将找到对的相同的(col1,col2)元组。)
实际上,我有一些代码在理论上是正确的,但是在我的系统上运行非常非常缓慢:
-- find examples where the 1st-column value exists on more than one second-column value to test this.
Select TOP 10 [Col_1], count(1) as countRows_outer from
(
SELECT [Col_2]
,[Col_1]
,count(1) as countRowsInner
FROM [OurDatabase].[dbo].[OurTable]
WHERE
(
(Col_1 is not null)
and
(len (Col_1) > 0)
)
group by [Col_2] ,[Col_1] -- after studying: Inner group by *NOT* needed
having (count(1) >= 2) -- not really needed, but limits search set, faster query results
--order by [Col_1], [Col_2] -- , countRows desc
)c1
group by Col_1
having(count(1) >= 2) -- > 1 (per answer below, may be more efficient here)
order by countRows_outer desc
在上面的代码中,确实不需要内部的“ having”子句,也不需要“ top”关键字,但是它们可以使速度加快。
有人能有更好的方法吗,或者有一种更快的方法。
在此示例中,所有列均为nvarchar(255)。
我将SSMS 14.017与选择@@ version = Microsoft SQL Server 2014(SP3)的基础SQL数据库一起使用
答案 0 :(得分:1)
您不能通过简单的GROUP BY来做到这一点
SELECT col1
FROM
table
GROUP BY col1
HAVING COUNT(DISTINCT col2)> 1
这应该使您出现具有多个table1.col2值的table1.col1值