2013-11-23 150 views
0

我需要刪除所有未記錄特定流派的藝術家;即爵士樂片頭。我制定了以下查詢:刪除特定的記錄數據SQL

select * from artists ar 
join titles ti on ti.artistid = ar.artistid 
where ti.genre != 'jazz'; 

我相信這些數據是沒有錄製爵士樂標題的藝人。另外,我不確定刪除這些數據的命令。

我的藝術家表如下:

Artists 
------- 
ArtistID, ArtistName, City, Region 

我的標題表如下:

Titles 
------ 
TitleID, ArtistID, Title, StudioID, Genre 

我也曾嘗試:

delete artists 
from artists ar 
inner join 
titles ti on ti.artistid = ar.artistid where ti.genre != 'jazz'; 

的SQL查詢引擎拋出我一個錯誤說明:錯誤1109(42S02):未知表格'MULTI DELETE'中的藝術家

+0

你的第一個查詢是錯誤的。它列出了所有錄製非爵士樂標題的藝術家。所以它會列出一個錄製古典的藝術家,即使他也錄製過爵士樂。 – Barmar

+1

爲什麼'選擇ar.artistid,ar.artistname'而不是'select *'? – godzilla3000

回答

1

你的第一個查詢應該是:

SELECT a.* 
FROM artists a 
LEFT JOIN titles t ON t.artistid = a.artistid AND t.genre = 'jazz' 
WHERE t.artistid IS NULL 

相應DELETE是:

DELETE a.* 
FROM artists a 
LEFT JOIN titles t ON t.artistid = a.artistid AND t.genre = 'jazz' 
WHERE t.artistid IS NULL 
+0

非常感謝。我知道這是正確的,因爲我在運行刪除查詢後收到一個空集。我會接受這個答案(和所有其他類似性質的答案),因爲stackoverflow允許。 – user2948897

+0

@Barmar乍一看你的DELETE,我雖然'a。*'是個錯誤。但是我錯了。它運作良好。我不時忘記了多表刪除的語法。但很簡單!首先測試SELECT查詢,然後將SELECT替換爲DELETE。謝謝! –