Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何删除此SQL子句重复?_Sql Server_Tsql_Duplicates_Query Optimization - Fatal编程技术网

Sql server 如何删除此SQL子句重复?

Sql server 如何删除此SQL子句重复?,sql-server,tsql,duplicates,query-optimization,Sql Server,Tsql,Duplicates,Query Optimization,我有两个查询,它们在同一个表上使用相同的条件进行选择。你能帮我删除这个副本吗 if exists(select count(1) from (<table>) t where (<condition>) having count(1) = 1) set @yes = 1 if @yes = 1 select @x = X

我有两个查询,它们在同一个表上使用相同的条件进行选择。你能帮我删除这个副本吗

if exists(select count(1)    
              from (<table>) t   
              where  (<condition>)   
              having count(1) = 1)   
    set @yes = 1    

if @yes = 1    
    select @x = X   
        from (<table>) t   
        where  (<condition>)
存在仅可作为另一个条件:

SELECT @x = X
FROM   <table> t
WHERE  <condition>
AND    EXISTS (
    SELECT 1
    FROM   <table> t1
    WHERE  <condition>
    HAVING count(*) = 1
    );
id是主键或。 反向逻辑:如果没有其他行符合条件,则仅选择符合条件的行。

存在可作为另一个WHERE条件:

SELECT @x = X
FROM   <table> t
WHERE  <condition>
AND    EXISTS (
    SELECT 1
    FROM   <table> t1
    WHERE  <condition>
    HAVING count(*) = 1
    );
id是主键或。
反向逻辑:如果没有其他行符合条件,则仅选择符合条件的行。

请检查您的意思是否是:

    select 
      @x = X   
    from 
      (<table>) t   
    where  
      (<condition>)
    group by X
    having count(*) = 1


请检查你的意思是否是:

    select 
      @x = X   
    from 
      (<table>) t   
    where  
      (<condition>)
    group by X
    having count(*) = 1


如果表中的“X”字段不为空,则可以使用此查询:

SET @x = null

SELECT @x = X   
        FROM (<table>) t   
        WHERE (<condition>)
IF (@x IS NOT NULL) BEGIN SET @yes = 1 END

如果表中的“X”字段不为空,则可以使用此查询:

SET @x = null

SELECT @x = X   
        FROM (<table>) t   
        WHERE (<condition>)
IF (@x IS NOT NULL) BEGIN SET @yes = 1 END

您的代码相当于:

select @yes = 1,@x=max(X) from (<table>) t   
       where  (<condition>)   
       having count(1) = 1

您的代码相当于:

select @yes = 1,@x=max(X) from (<table>) t   
       where  (<condition>)   
       having count(1) = 1

您可以添加具有所需结果的样本记录吗?您可以添加具有所需结果的样本记录吗?如果仅包含1行必填,我需要获得X如果仅包含1行必填,我需要获得X,是,它是同一个表。是,它是同一个表。@x应该是空的,如果我们有0或2行是必需的,那么在这种情况下,@yes也将是空的。请尝试运行此查询。@x应该为空,如果我们有0或2行是必需的,那么在这种情况下,@yes也将为空。尝试运行此查询。如果我正确理解问题,当多个具有不同X的行符合条件时,此操作失败。是否添加了GROUP BY,因为列“X”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。?@ErwinBrandstetter我想即使是SKINDER的示例查询也会有相同的问题。斯金德-Yes@techdo:不,没有@如果正好有一行匹配,则示例中的yes仅为1。如果我正确理解问题,当多个具有不同X的行符合条件时,此操作失败。是否添加了GROUP BY,因为列“X”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。?@ErwinBrandstetter我想即使是SKINDER的示例查询也会有相同的问题。斯金德-Yes@techdo:不,没有@如果恰好有一行匹配,则示例中的“是”仅为1。