我對動物的表像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