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