2012-03-06 21 views
242

Aşağıdaki çalışmayan bir sorgu var. Neyi yanlış yapıyorum? Bu mümkün mü?SQL Server - güncelleştirirken iç birleştirme

UPDATE ProductReviews AS R 
    INNER JOIN products AS P 
     ON R.pid = P.id 
SET R.status = '0' 
WHERE R.id = '17190' 
    AND P.shopkeeper = '89137' 
+0

GÜNCELLEME dbo.ProductReviews = P.id WHERE R.id = '17190' VE P.shopkeeper = '89137'; – Hassan

+0

Bu, bir tabloyu diğerinden güncellemeye çalışmadığı için yinelenmez. Sadece, sadece bu maddeyi uygulamak için katılıyor. – nuander

cevap

539
UPDATE R 
SET R.status = '0' 
FROM dbo.ProductReviews AS R 
INNER JOIN dbo.products AS P 
     ON R.pid = P.id 
WHERE R.id = '17190' 
    AND P.shopkeeper = '89137'; 
+0

, UPDATE JOIN SET WHERE'nin neden sözdiziminin niçin yanlış olduğunu açıklayabilir misiniz, ancak JOIN NEREDE UDPATE SETİ ile çalışır? Bu mysql sürümüne bağlı mı? – Farside

+1

@Bu sözdizimi SQL Server için geçerlidir. Birisi size MySQL sözdizimi ile yardım etmeli, üzgünüm. –

+0

Çok teşekkür ederim –

42

Bu yapmalıyım: İÇ R.pid AÇIK P OLARAK dbo.products KATILIN R SET R.status = AS '0'

UPDATE ProductReviews 
SET ProductReviews.status = '0' 
FROM ProductReviews 
     INNER JOIN products 
     ON ProductReviews.pid = products.id 
WHERE ProductReviews.id = '17190' 
     AND products.shopkeeper = '89137' 
+0

bu bana "ERROR: tablo adı" ProductReviews "öğesinin bir kereden fazla belirtildiğini gösterir. Postgresql –

+1

" FROM ProductReviews AS pr "ile de" SET status = "0" yerine "ProductReviews.status =" 0 ' –

+2

@JohhanSantana Bu soru SQL server olarak etiketlendi - diğer DBMS sistemlerinde çalışacağına dair bir garanti yok. – Bridge