2012-03-06 38 views
242

Tôi có truy vấn dưới đây không hoạt động. Tôi đang làm gì sai? Điều này thậm chí có thể?Máy chủ SQL - tham gia bên trong khi cập nhật

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

dbo.ProductReviews CẬP NHẬT AS R SET R.status = '0' INNER JOIN dbo.products AS P ON R.pid = P.id WHERE R.id = '17190' AND P.shopkeeper = '89137'; – Hassan

+0

Đây không phải là bản sao vì anh ấy không cố gắng cập nhật một bảng TỪ khác. Anh ta chỉ tham gia thi hành mệnh đề where. – nuander

Trả lời

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

bạn có thể giải thích tại sao cú pháp giống nhau UPDATE JOIN SET WHERE không đúng, nhưng nó hoạt động với UDPATE SET FROM JOIN WHERE? Liệu nó phụ thuộc vào phiên bản của mysql? – Farside

+1

@Farside cú pháp này là dành cho SQL Server. Người khác sẽ phải giúp bạn với cú pháp MySQL, xin lỗi. –

+0

Cảm ơn bạn rất nhiều –

42

này nên làm điều đó:

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

này mang lại cho tôi 'LỖI: tên bảng "ProductReviews" định hơn once' trong postgresql –

+1

cố định nó bằng cách làm' TỪ ProductReviews AS pr' cũng 'tình trạng SET = '0'' thay vì 'ProductReviews.status =' 0'' –

+2

@JohhanSantana Câu hỏi này được gắn thẻ SQL server - không đảm bảo nó sẽ hoạt động trên các hệ thống DBMS khác. – Bridge

Các vấn đề liên quan