Access 2016 – O interogare simplă de actualizare dă „Operațiunea trebuie să utilizeze o interogare actualizabilă” Eroare (Programare, Sql, Ms Access, Actualizare Sql)

Daniel a intrebat.

Încerc să transfer color valoarea câmpului de la dress în tabelul purchase tabel, deoarece îmi schimb puțin structura BD-ului.

Iată interogarea, este destul de simplă dar tot primesc eroare.

UPDATE purchase
SET purchase.color = (SELECT dress.color
                      FROM dress INNER JOIN purchase
                      ON dress.ID = purchase.dressID);

Am încercat, de asemenea, fără JOIN și punând condiția în clauza WHERE, dar primesc aceeași eroare.

UPDATE purchase
SET purchase.color = (SELECT dress.color
                      FROM dress, purchase
                      WHERE dress.ID = purchase.dressID);

Am citit, de asemenea, că această eroare se datorează uneori faptului că fișierul este „read only” sau alte probleme cu permisiunile, am încercat totul, dar nimic nu pare să funcționeze.

Editare: am încercat și acest lucru, dar primesc eroarea „operator lipsă”.

UPDATE purchase
SET purchase.color = dress.color
FROM dress INNER JOIN purchase ON dress.ID = purchase.dressID;

Comentarii

  • Posibil duplicat al SQL Update woes in MS Access – Operațiunea trebuie să utilizeze o interogare actualizabilă –  > Por Ken White.
  • Mulțumesc, am răsfoit niște topicuri, dar acesta avea răspunsul, unul foarte ciudat de altfel. Voi edita cu un răspuns mai jos. Vă mulțumesc din nou! –  > Por Daniel.
2 răspunsuri
Gordon Linoff

Cred că doriți cu adevărat o subîntrebare simplă, corelată:

UPDATE purchase
    SET color = (SELECT d.color
                 FROM dress as d 
                 WHERE d.ID = purchase.dressID
                );

Dacă este posibil să existe duplicate în subîntrebare, încercați TOP 1:

UPDATE purchase
    SET color = (SELECT TOP 1 d.color
                 FROM dress as d 
                 WHERE d.ID = purchase.dressID
                );

Comentarii

  • Bună, mulțumesc pentru răspuns, dar de fapt am rezolvat problema, dacă ești curios cum, verifică răspunsul meu de mai sus. –  > Por Daniel.
  • @Daniel . . . Presupusa ta soluție nu face ceea ce te aștepți. V-aș sugera să folosiți versiunile din acest răspuns. –  > Por Gordon Linoff.
Daniel

Am găsit un răspuns datorită linkului lui Ken White.

Această interogare cu cuvântul cheie ciudat „DISTINCTROW” a rezolvat problema.

UPDATE DISTINCTROW purchase
INNER JOIN dress ON purchase.dressID = dress.ID
SET purchase.color = dress.color;

Comentarii

  • Ați încercat această interogare fără DISTINCTROW? Pentru că sintaxa JOIN din întrebarea dvs. (a treia încercare) a fost greșită – trebuie să fie UPDATE x JOIN y SET x..., nu UPDATE x SET x... FROM x JOIN y –  > Por Andre.