2012-03-06 1 views
242

J'ai la requête ci-dessous qui ne fonctionne pas. Qu'est-ce que je fais mal? Est-ce seulement possible?SQL Server - jointure interne lors de la mise à jour

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 UPDATE AS R SET R.status = '0' INNER JOIN dbo.products AS P SUR R.pid = P.id O WH R.id = '17190' ET P.shopkeeper = '89137'; – Hassan

+0

Ce n'est pas un doublon car il n'essaie pas de mettre à jour une table d'un autre. Il ne fait que se joindre à l'application de la clause where. – nuander

Répondre

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

pouvez-vous s'il vous plaît expliquer pourquoi syntaxe semblable UPDATE JOIN SET WHERE est incorrect, mais cela fonctionne avec UDPATE SET FROM JOIN WHERE? Cela dépend-il de la version de mysql? – Farside

+1

@Farside cette syntaxe est pour SQL Server. Quelqu'un d'autre devra vous aider avec la syntaxe MySQL, désolé. –

+0

Merci beaucoup –

42

Cela devrait le faire:

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

cela me donne ERREUR: nom de la table "ProductReviews" spécifié plus d'une fois »dans postgresql –

+1

l'a fixé en faisant' FROM ProductReviews AS pr' aussi 'SET status = '0'' au lieu de' ProductReviews.status =' 0'' –

+2

@JohhanSantana Cette question a été étiquetée Serveur SQL - aucune garantie que cela fonctionnera sur d'autres systèmes de SGBD. – Bridge

Questions connexes