我对动物的表像SQL搜索复制
- 狮子
- 虎
- 大象
- 捷豹
- 列表项
- 猎豹
- 彪马
- 犀牛
我想插入新的动物在这张表中,我不读取CSV文件中的动物名称。
假设我得到的文件
狮子,老虎,美洲豹
,因为这些动物已经在“动物”表中下面的名称,什么应该是一个单一的SQL查询,将确定动物已经存在于表格中。
修订1
我想要一个查询,会给我的动物,已经在表的列表。我不希望查询插入该动物。 我只想重复动物
我对动物的表像SQL搜索复制
我想插入新的动物在这张表中,我不读取CSV文件中的动物名称。
假设我得到的文件
狮子,老虎,美洲豹
,因为这些动物已经在“动物”表中下面的名称,什么应该是一个单一的SQL查询,将确定动物已经存在于表格中。
修订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行。
SELECT COUNT(your_animal_column)FROM tblAnimals WHERE your_animal_column =?;
问号由您的csv值填充。 如果此语句返回的值超过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)
如何
SELECT ANIMAL_NAME, COUNT(*)
FROM ANIMALS
GROUP BY ANIMAL_NAME
HAVING COUNT(*) > 1
,如果你使用SQL Server 2008这应该给你所有重复的条目
这会找到已经在表格中重复的动物。如果我正确理解问题,则OP在导入CSV文件时希望防止重复项 – Andomar 2010-05-17 10:40:03
修订后的问题显示“我只想复制动物” – 2010-05-17 10:41:57
,检查出MERGE语句... – 2010-05-17 10:31:54