Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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中“exists”和“in”的区别_Sql_Sql Server_Tsql_Count_Window Functions - Fatal编程技术网

SQL中“exists”和“in”的区别

SQL中“exists”和“in”的区别,sql,sql-server,tsql,count,window-functions,Sql,Sql Server,Tsql,Count,Window Functions,这是我的问题 select nom, prenom, mail ,trig from dbo.reseau where nom, prenom, mail, trig in ( select mail, nom, prenom, mail, trig from dbo.reseau group by mail, nom, prenom, mail, trig having count(1) > 1 ) 这个查询不起作用,他们告诉我必须使用exist

这是我的问题

select nom, prenom, mail ,trig 
from dbo.reseau
where  nom, prenom, mail, trig in  
(
    select mail, nom, prenom, mail, trig
    from dbo.reseau
    group by mail, nom, prenom, mail, trig
    having count(1) > 1
)

这个查询不起作用,他们告诉我必须使用exists。我使用了id,但它不起作用。

您的语法无效。您似乎在寻找元组相等:

where (nom, prenom, mail, trig) in (
    select mail, nom, mail, trig
    from ...
)
很少有数据库支持这种语法,SQL Server不是其中之一

看起来你想展示复制品。您可以使用exists,但是您需要一个主键列或一组列,并且从查询中看不出它是哪一个。假设id:

EXISTS:指定要测试行是否存在的子查询

换句话说。。。此子查询是否返回任何行

IN:确定指定的值是否与子查询或列表中的任何值匹配

换句话说。。。嘿,请告诉我职务为“设计工程师”、“工具设计师”、“营销助理”的员工的名字和姓氏 下面链接中的代码片段

SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');  
GO  
进一步阅读


你的问题是什么?这个查询不起作用不是问题。你是在问是什么让你的Q出现重复,还是如何解决其他问题?你需要更多地解释你试图实现的目标,并展示一些样本数据和预期结果。首先,IN只适用于单个列,而不是列列表。我希望每个列都显示重复项抱歉,请以我的投票结束。我建议你坐下来花一天时间制定一个具体的问题。同时,他们不是一直告诉我你也坐下来阅读文档-文档中的语法和示例清楚地解释了ae中的内容和存在的目的,这会有所帮助。我不确定您是从哪里想到的,当TSQL明确指出:-是一个结果集为一列的子查询时,可以使用in。你的问题有5个。为了补充TomToms的评论,你有质量低劣问题的历史记录,我建议再次阅读FAQ,了解如何提出一个好问题,例如。我们都想帮助您,但我们对您的系统/设计/需求都不熟悉,因此您必须努力以清晰、简洁的方式向我们传达您的问题。和是必须的。此查询用于显示此列的重复项
select *
from (
    select r.*, count(*) over(partition by nom, prenom, mail, trig) cnt
    from dbo.reseau r
) r
where cnt > 1
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');  
GO