Sql server 2008 只需要在sql中显示重复的值
我有一张桌子Sql server 2008 只需要在sql中显示重复的值,sql-server-2008,Sql Server 2008,我有一张桌子 id----name----roll-----class 1----ram-------1-----2 2----shyam-----2-----3 3----ram-------1-----3 4----shyam-----2-----3 5----ram-------1-----2 6----hari------1-----5 我只需要在重复的行中找到具有公共名称、卷名、类的行。所以我的预期结果是 id----name----roll-----cla
id----name----roll-----class
1----ram-------1-----2
2----shyam-----2-----3
3----ram-------1-----3
4----shyam-----2-----3
5----ram-------1-----2
6----hari------1-----5
我只需要在重复的行中找到具有公共名称、卷名、类的行。所以我的预期结果是
id----name----roll-----class
1----ram-------1-------2
2----shyam-----2-------3
4----shyam-----2-------3
5----ram-------1-------2
我试图从下面的查询中获取,但这里只支持一个字段。我需要这三个领域的共同点。请帮我做这件事。谢谢
SELECT *
FROM table
WHERE tablefield IN (
SELECT tablefield
FROM table
GROUP BY tablefield
HAVING (COUNT(tablefield ) > 1)
)
这将仅重新运行重复条目一次:
select t.id, t.name, t.roll, t.class
from table t
inner join table t1
on t.id<t1.id
and t.name=t1.name
and t.roll = t1.roll
and t.class=t1.class
我建议这样做
SELECT A.* FROM
Table A LEFT OUTER JOIN Table B
ON A.Id <> B.Id AND A.Name = B.Name AND A.Roll = B.Roll AND A.Class = B.Class
WHERE B.Id IS NOT NULL
从中选择一个*
表A左外联接表B
在A.Id上B.Id和A.Name=B.Name和A.Roll=B.Roll和A.Class=B.Class
其中B.Id不为空
类似的东西应该可以工作(但我没有测试):
这里好像有好几件道具。如果您将在代码中使用查询,请注意查询的成本。请尝试对数据库进行“解释”。您可以使用
谢谢你的回答。我很欣赏你举的例子。@MikaelEriksson我怀疑,选择的答案是胡言乱语@Mikael嗯,这不起作用,但正如他所说的,如果我把*放在计数中,我认为这会起作用。我只是随机检查,但我需要彻底检查,因为我的数据库是复杂的,然后我在示例中给出。我会让你知道的。@Dinupkandel-更改为
count(*)
将显示查询中的下一个错误。如果字段列表中的id
不是group by子句的一部分,则该字段列表中不能有该字段。@MikaelEriksson在我的问题中,我寻找的是除id之外的所有列都应完全匹配。在或条件中,我应该做什么,即如果数据在名称、卷或类中都是公共的。我有一个表,表a和B是什么意思。我没有得到它。“从表A”=”从名为“表”的表中,从现在起我在查询中将其称为“A”
SELECT A.* FROM
Table A LEFT OUTER JOIN Table B
ON A.Id <> B.Id AND A.Name = B.Name AND A.Roll = B.Roll AND A.Class = B.Class
WHERE B.Id IS NOT NULL
select a1.*
from table a1, a2
where (a1.id != a2.id)
and (a1.name == a2.name)
and (a1.roll== a2.roll)
and (a1.class== a2.class);
select id, name, roll, class
from (select id, name, roll, class,
count(*) over(partition by name, roll, class) as c
from YourTable) as T
where c > 1
order by id