2011-04-15 58 views
0

假設有一個表EMPLOYEE與SQL Server上的列ID (int), Name (nvarchar), Surname(nvarchar)刪除SQL Server上只有一條記錄

這就是你所知道的全部。您無法看到表格中的數據。

您被命令只刪除其中一個名爲'Alice'的記錄。

你會如何編寫適當的查詢?

+2

你到目前爲止的代碼否則這看起來很像一個家庭作業:對 – 2011-04-15 12:33:32

+1

你也知道ID是唯一的? – 2011-04-15 12:33:44

+0

在刪除之前,請檢查名稱爲「Alice」的記錄數量。如果只有一條記錄,那麼下面的解決方案將會很好。如果沒有,找出哪個「愛麗絲」需要刪除,然後通過ID刪除。 – Jacco 2011-04-15 12:37:08

回答

8
DELETE TOP (1) 
FROM EMPLOYEE 
WHERE Name='Alice' 
5
DELETE TOP (1) FROM EMPLOYEE WHERE Name = 'Alice' 
3

在SQL Server:

DELETE TOP 1 FROM EMPLOYEE WHERE Name = 'Alice' 
+1

如果你張貼代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊「代碼示例「按鈕('{}'),以便對其進行精確格式化和語法突出顯示!如果您發佈錯誤消息,請**使用blockquotes('「')正確格式化錯誤消息。 – 2011-04-15 12:35:06

1

所有建議的答案在這裏主要是相似的,所有的人是最佳至於你介紹你的問題。

但這會強制您的代碼刪除Name ='Alice'的第一條記錄。但是,如果您需要有一點額外的權力來選擇刪除表中有多個「Alice」的情況。但當然的ID必須是一個Primary KeyUnique

SELECT FROM EMPLOYEE ID, Surname WHERE Name = 'Alice' 

這將顯示的結果的話,你可以把目標記錄的ID將被刪除,並將其放置在下面的查詢(讓我們說的要刪除的記錄的ID是56)

DELETE FROM EMPLOYEE WHERE ID = 56 
0
declare @Holder table (EmployeeKey int , Name varchar(24) , Surname varchar(24)) 


Insert into @Holder (EmployeeKey , Name , Surname) 
      select 201 , 'Alice' , 'Smith' 
union all select 102 , 'Mary' , 'Smith' 
union all select 203 , 'Alice' , 'Henderson' 
union all select 104 , 'John' , 'Smith' 
union all select 105 , 'Paul' , 'Johnson' 
union all select 206 , 'Alice' , 'Jones' 

Delete @Holder 
/* Select * ............. while debugging, you can remove the 'Delete @Holder' and put in a 'Select *' to see the results (of what ~will be deleted) */ 
From 
@Holder h 
join 
(select top 1 EmployeeKey from @Holder innerH where Name = 'Alice' /* order by EmployeeKey DESC */) as derived1 
on h.EmployeeKey = derived1.EmployeeKey 

select * from @Holder order by Name , EmployeeKey 

/* 
order by EmployeeKey DESC is optional, aka, if you want to "prefer" which one gets popped for delete, you can tweak it as needed 
*/