2013-02-07 5 views
1
UPDATE 
    tbl1 INNER JOIN tbl2 ON tbl1.id = tbl2.id 
SET tbl2.Field1 = 
    (SELECT TOP 1 tbl3.Field1 FROM tbl3 WHERE tbl3.FromDate<tbl1.StartDate And 
    tbl3.Number=tbl2.Number ORDER BY tbl3.FromDate DESC) 

J'essaie de mettre à jour Champ1 sur chaque ligne de tbl2 avec le SQL ci-dessus, mais je reçois l'erreur:mise à jour SQL Nested ne fonctionne pas

Operation must use an updateable query.

Qu'est-ce que je fait de mal?

Répondre

1

Parce que la mise à jour avec la syntaxe de jointure varie entre les bases de données, j'utilise en général:

UPDATE tbl2 
    SET tbl2.Field1 = . . . 
    from tbl1 
    where tbl1.id = tbl2.id 

(. Je mettrais dans la déclaration set, mais StackOverflow ne me laisse pas le faire)

+0

Ne pas comprendre - la valeur de Field1 est censé provenir TBL3 – ThorOstergaard

+0

Si je remplace le (select ...) avec une valeur que ça fonctionne comme prévu – ThorOstergaard

0

Selon votre description ci-dessus, il n'y a pas besoin de mise à jour via une jointure. Que diriez-vous:

UPDATE tbl2 
SET tbl2.Field1 = 
(SELECT TOP 1 tbl3.Field1 FROM tbl1 JOIN tbl2 AS tbl2_2 ON tbl1.id = tbl2_2.id 
            JOIN tbl3 
WHERE tbl3.FromDate < tbl1.StartDate 
    AND tbl3.Number=tbl2.Number 
ORDER BY tbl3.FromDate DESC) 

Si les tables sont grandes, je considérerais l'indexation tbl3.FromDate et tbl2.Number possible.

Brian

0

Ceci est votre posté organisé re-SQL afin qu'elle fonctionne une mise à jour:

UPDATE tbl2 
SET Field1 = 
    (
     SELECT TOP 1 
     tbl3.Field1 
     FROM tbl1 
     INNER JOIN tbl2 
     ON tbl1.id = tbl2.id 
     INNER JOIN tbl3 
     ON tbl2.Number = tbl3.Number 
     WHERE 
     tbl3.FromDate<tbl1.StartDate 
) 
Questions connexes