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。