如何在SQL Server表列中查找相同值的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL Server表列中查找相同值的行相关的知识,希望对你有一定的参考价值。

我有这样的查询:

SELECT
   *
FROM 
   sub_aminer_paper
WHERE 
   p_abstract LIKE (
                    SELECT 
                       p_abstract
                    FROM 
                       sub_aminer_paper
                    GROUP BY 
                       p_abstract
                    HAVING 
                       COUNT(pid) > 1
                    )
AND 
   pid IN (784502,787096,789536)
ORDER BY
   pid

我想从中检索p_abstract列具有相同值的行,其中p_abstract中的text列的数据类型。执行此查询时,出现以下错误:

除非使用IS NULL或LIKE运算符,否则无法比较或排序text,ntext和image数据类型。

答案

检查这是否是您所期望的。

SELECT *
FROM sub_aminer_paper
WHERE pid IN (784502,787096,789536)
and CAST(p_abstract AS varchar(max)) in (
    SELECT CAST(p_abstract AS varchar(max))
    FROM   sub_aminer_paper
    WHERE pid IN (784502,787096,789536)
    Group BY CAST(p_abstract AS varchar(max))
    having count(*) > 1)
ORDER by pid
另一答案

您需要比较文本字段的校验和

WITH PAPERS AS(
    SELECT 
           pid,
           BINARY_CHECKSUM(p_abstract) as chksum
        FROM 
           sub_aminer_paper
), DOUBLES AS (
    SELECT 
        chksum
        ,qty = COUNT(*)
      FROM
         papers
      GROUP BY
        chksum
      HAVING 
        COUNT(*) > 1
)
SELECT *
    FROM 
        PAPERS P
        JOIN DOUBLES D ON P.chksum = D.chksum

以上是关于如何在SQL Server表列中查找相同值的行的主要内容,如果未能解决你的问题,请参考以下文章

获取表列中序列值的范围

SQL - 选择两列中具有相同值的行

如何通过 sql loader 设置要加载到表列中的固定长度

如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?

我不能在列中添加具有 2 个相同值的行

如何在代码中的sql表列中插入默认值