2010-05-17 56 views
1

我对动物的表像SQL搜索复制

  • 狮子
  • 大象
  • 捷豹
  • 列表项
  • 猎豹
  • 彪马
  • 犀牛

我想插入新的动物在这张表中,我不读取CSV文件中的动物名称。

假设我得到的文件

狮子,老虎,美洲豹

,因为这些动物已经在“动物”表中下面的名称,什么应该是一个单一的SQL查询,将确定动物已经存在于表格中。

修订1

我想要一个查询,会给我的动物,已经在表的列表。我不希望查询插入该动物。 我只想重复动物

+0

,检查出MERGE语句... – 2010-05-17 10:31:54

回答

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行。

+0

我可以有一个查询,我可以一次传递多个参数,只是获得已经在表中的动物列表。 我不想要添加动物的查询。 – Ram 2010-05-17 10:30:54

+0

@Ram:也许一个IN子句可以解决这个问题,回答编辑 – Andomar 2010-05-17 10:34:17

0

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

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

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) 
0

如何

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

,如果你使用SQL Server 2008这应该给你所有重复的条目

+0

这会找到已经在表格中重复的动物。如果我正确理解问题,则OP在导入CSV文件时希望防止重复项 – Andomar 2010-05-17 10:40:03

+0

修订后的问题显示“我只想复制动物” – 2010-05-17 10:41:57