2010-11-20 20 views
0

2 tablo, words ve lists var.SQL Başka bir tablodaki verileri denetlerken silme

words listelere aittir ve listId alanından referans alınmıştır.

lists, bir username alanını içerir.

id aracılığıyla bir sözcüğü silmem gerek ama önce kullanıcı adının doğru olup olmadığını kontrol etmem gerekiyor, bu yüzden listeler tablosuna başvurmam gerekiyor.

Şimdiye kadar yaptığım iş bu değil.

DELETE FROM w 
USING lists AS l INNER JOIN words AS w 
WHERE 
l.username = 'admin' 
AND w.listId = 31 
AND l.id = w.listId 

cevap

2
DELETE w FROM words w 
INNER JOIN lists l on l.id = w.listid 
WHERE 
l.username = 'admin' 
AND w.listId = 31 
+0

I c 'AND w.listId' ve 'w.id' için idam edildi ve işe yaradı, üzgünüm, size yeterli bilgi vermedim – jax

0

benim-sql sözdizimi (I Oracle kullanın) yaklaşık% 100 emin değilim, ama bu çalışması gerekir:

DELETE FROM words 
WHERE listid in (
    SELECT 31 from lists where username = 'admin' 
) 

... Eğer gerçekten gibi alabilseydin iç seçme değiştirin:

SELECT listId from lists where username = 'admin' and listId = 31 

(ama gerekli değil)

+0

Bu 31 numarasını seçiyor, Oracle'da bile doğru bir şey döndüreceğinden emin değilim. .. –

+1

Doğru ... seçmesi gereken şey bu! Silmeye çalıştığı liste bu. – Gerrat

İlgili konular