用于搜索重复项的SQL

时间:2010-05-17 10:25:49

标签: sql sql-server

我有一张像

这样的动物的桌子
  • 狮子座
  • 美洲虎
  • 列表项
  • 猎豹
  • 彪马
  • 犀牛

我想在此表中插入新动物,而不是从CSV文件中读取动物名称。

假设我在文件中有以下名字

狮子,虎,美洲虎

由于这些动物已经在“动物”表中,应该是一个单一的SQL查询,它将确定动物是否已经存在于表中。

修订版1

我想要一个查询,它会给我已经在表格中的动物列表。我不想要一个查询来插入那个动物。 我只想要重复的动物

4 个答案:

答案 0 :(得分:1)

要检查狮友是否已经在桌子中:

select count(*) from animals where name = 'Lion'

您可以使用where子句在一个查询中执行检查和插入:

insert into animals (name) 
select  'Lion'
where not exists 
        (
        select * from animals where name = 'Lion'
        )

在回复您的评论时,选择动物的子列表:

select name from animals where name in ('Lion', 'Tiger', 'Jaguar')

对于已经存在的每只动物,这将返回最多3行。

答案 1 :(得分:0)

SELECT COUNT(your_animal_column)FROM tblAnimals WHERE your_animal_column =?;

问号由您的csv值填充。 如果此语句返回的值大于0,则该值已存在

答案 2 :(得分:0)

如果您的传入文件已经采用标准化列格式,而不是像您显示的那样以逗号分隔,那么应该很容易。为插入创建一个临时表,然后像..

insert into YourLiveTable ( animalname ) 
   select Tmp.animalname
      from YourTempInsertTable Tmp
      where Tmp.animalname not in 
               ( select Live.animalname  
                    from YourLiveTable Live )

要匹配您修改的请求...只需使用选择部分并将“NOT IN”更改为“IN”

   select Tmp.animalname
      from YourTempInsertTable Tmp
      where Tmp.animalname IN 
               ( select Live.animalname  
                    from YourLiveTable Live )

答案 3 :(得分:0)

怎么样

SELECT ANIMAL_NAME, COUNT(*)
FROM ANIMALS
GROUP BY ANIMAL_NAME
HAVING COUNT(*) > 1

这应该为您提供所有重复的条目