Avatar billede dgivoni Nybegynder
14. januar 2010 - 14:30 Der er 10 kommentarer og
1 løsning

Jet SQL query med join subselect giver non updateable query fejl

Hej,

Flg. SQL query virker fint i Transact SQL, men overfoert til Jet SQL (Access) giver den en fejl. Det er ikke et spoergsmaal om skriverettigheder, men jeg kan forstaa at man ikke kan bruge subselects med join i en Update.

Her er SQL'en:

update familia set suprabrandid = (select marca.suprabrandid from producto inner join marca on marca.id = producto.idmarca where producto.idfamilia = familia.id and (producto.active = 1 OR producto.active = -1))

Hvordan kan jeg faa den til at virke?

Mvh,
David
Avatar billede terry Ekspert
14. januar 2010 - 14:51 #1
You could try making a query in place of the sub select then make a join on familia.id
Avatar billede dgivoni Nybegynder
14. januar 2010 - 16:10 #2
Thanks for responding, Terry.

As far as I know, I can't make joins in an UPDATE, but perhaps I don't understand what you mean. Could you give me an example?
Avatar billede terry Ekspert
14. januar 2010 - 17:39 #3
can you send an Access db with the tables in?

ekspertenATsanthell.dk
AT = @

Are you executing the SQL on a web server?
Avatar billede dgivoni Nybegynder
15. januar 2010 - 08:53 #4
Thanks, Terry, I've sent you the database.

The SQL is being executed on a windows machine in a C#.Net application, i.e. not a web server.

Let me know if you need any more info.
Avatar billede terry Ekspert
15. januar 2010 - 11:28 #5
qryMarcaProducto:
SELECT marca.suprabrandid, producto.idfamilia
FROM producto INNER JOIN marca ON producto.idmarca = marca.id
WHERE (((producto.active)=1 Or (producto.active)=-1));


SQL:
UPDATE familia INNER JOIN qryMarcaProducto ON familia.id = qryMarcaProducto.idfamilia SET familia.suprabrandid = [marca].[suprabrandid];


Silly that this is necessary, why shouldnt a subselect work?
Avatar billede terry Ekspert
15. januar 2010 - 11:31 #6
It would (Maybe (to cover myself :o))) also be possible to do it  all in one SQL by having the SQL in qryMarcaProducto return a derived table (TEMP table) and joining on this in the UPDATE SQL.
Avatar billede dgivoni Nybegynder
19. januar 2010 - 10:50 #7
Ok, Terry, your suggestion worked, but since I had to create it all through SQL I'm just going to post the final solution:

CREATE VIEW qryMarcaProducto (suprabrandid, idfamilia) as SELECT marca.suprabrandid, producto.idfamilia FROM producto INNER JOIN marca ON producto.idmarca = marca.id WHERE (((producto.active)=1 Or (producto.active)=-1));

UPDATE familia INNER JOIN qryMarcaProducto ON familia.id = qryMarcaProducto.idfamilia SET familia.suprabrandid = qryMarcaProducto.suprabrandid;

Thank you very much for helping out on this.
Avatar billede dgivoni Nybegynder
19. januar 2010 - 10:51 #8
Eksperten har aabenbart aendret sig lidt siden jeg sidst har brugt sitet. Hvordan giver jeg dig point?
Avatar billede terry Ekspert
19. januar 2010 - 13:27 #9
glad to hear you got it working.

It seems that quite a few users have problems with giving points.
You should be able to select from a list of those who have placed an answer whichI have  d. 15. januar 2010 kl. 11:28:22
Avatar billede dgivoni Nybegynder
19. januar 2010 - 13:51 #10
Ok, it was available now, don't know what happened earlier.
Thanks again for the help :)
Avatar billede terry Ekspert
25. januar 2010 - 08:42 #11
thanks
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester