2010-05-17 39 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