Avatar billede sbarnney Nybegynder
06. juni 2001 - 13:04 Der er 12 kommentarer og
2 løsninger

Update fra tabel til tabel

Jeg vil opdatere en pris i en tabel med en pris fra en anden tabel, hvor deres varenummere er ens.

Følgende er sat til:
dcs.did INT(6)
dcs.dkpris INT(6)
prodtest.varenr INT(6)
prodtest.kpris INT(6)

Jeg har dette sql script:

UPDATE prodtest
SET kpris = (SELECT dkpris FROM dcs
WHERE prodtest.varenr = dcs.did)

Dette virker i MS-Sql, men ikke i MySql ???????

Hvad er fejlen ?? og hvorfor ????

Stig
Avatar billede kichian Nybegynder
06. juni 2001 - 15:06 #1
MySQL understøtter IKKE sub-selects :-(
Dvs din \"kpris=(SELECT dkpris FROM...\" ikke er  gyldig MySQL-syntax
Avatar billede sbarnney Nybegynder
06. juni 2001 - 16:38 #2
Hva\' gør man så ???

Stig
Avatar billede netsrac Praktikant
06. juni 2001 - 17:34 #3
Hm...

UPDATE prodtest SET prodtest.kpris = dcs.dkpris WHERE prodtest.varenr = dcs.did

Avatar billede nebula Nybegynder
06. juni 2001 - 17:54 #4
Hmm jeg sad lidt og legede med det, men fandt ikke en ren SQL måde at løse dit problem på - er nok blevet lidt for vant til T-SQL :o/

En måde det kan løses på dog, er - via et scriptsprog eller ligende - at oprette en variabel der kan indeholde din select.

asp eksemple:
Set minQuery1 = \"SELECT dkpris FROM dcs WHERE prodtest.varenr = dcs.did\"
Set minQuery2 = \"UPDATE prodtest
SET kpris = \" & minQuery1(\"dkpris\")
Avatar billede nebula Nybegynder
06. juni 2001 - 17:56 #5
ah ja... selfølgeligt! netsrac har ret :o)
Avatar billede sbarnney Nybegynder
06. juni 2001 - 18:19 #6
-netsrac ved \"UPDATE prodtest SET prodtest.kpris = dcs.dkpris WHERE prodtest.varenr = dcs.did\"

kommer følgende melding:

1109 - Unknown table \'dcs\' in field list.

Stig
Avatar billede netsrac Praktikant
06. juni 2001 - 18:23 #7
Hm...

UPDATE prodtest, dcs SET prodtest.kpris = dcs.dkpris WHERE prodtest.varenr = dcs.did
Avatar billede sbarnney Nybegynder
06. juni 2001 - 18:30 #8
Hej netsrac - tester du det du skriver først ???
For det virker ikke. Hvis du bare sidder og gætter, bedes du droppe af spørgsmålet!

Stig
Avatar billede nebula Nybegynder
06. juni 2001 - 19:27 #9
Hmm prøv lige denne her (du må selv rette den til):

update
    users
set
    navn = \'b\'
FROM
    forklaring b
where
    navn = b.person
Avatar billede netsrac Praktikant
06. juni 2001 - 19:41 #10
Så er jeg væk fra dette spm. skal være så flink aldrig at hjælpe dig igen.
Avatar billede sbarnney Nybegynder
06. juni 2001 - 19:56 #11
Hej nebula og netsrac

Det er mit humør der svinger i øjeblikket. Jeg undskylder.

Nå men det dur sku\' ikk\' nebula, det pudsige er jo hvis man skriver select * from prodtest, dcs
where prodtest.varenr = dcs.did popper det hele frem som bestilt, men update vil altså ikke.

Stig
Avatar billede sbarnney Nybegynder
06. juni 2001 - 20:02 #12
Kunne man forstille sig noget i denne retning:

@Dim = select dcs.did from dcs

....... prodtest.varenr = @Dim

Jeg aner bare ikke hvordan ??

Stig
Avatar billede nebula Nybegynder
06. juni 2001 - 20:47 #13
Problemet er at mySQL ikke har nogen måde (stored procedures) at erklærer variabler på i SQL\'en (man kan dog lave et C modul og gøre det - men det virker lidt til grin).

Min konklusion på dette må være at mySQL endnu er for primitiv til at indeholde selv ANSI SQL (jeg sad og bøvlede med en løsning til dit problem der benyttede view - blot for at finde ud af at mySQL heller ikke understøttede views).

Og det er ikke pudsigt at en select virker... Hvad der er pudsigt er at man ikke kan lave joins i update - må indrømme det kom bag på mig - men det står beskrevet i dokumentationen som noget der kommer i version 4 (elsker du ikke bare open source?)

Og uden at ville påstå du gør noget forkert, hvad får du af fejl når du prøver mit forslag? Jeg var helt sikkert på at det ville ha virket :o/
Avatar billede sbarnney Nybegynder
16. juni 2001 - 12:02 #14
I har jo begge ret !
Desværre, kan man ikke gøre det jeg vil pt. i MySQL.

Stig
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
Computerworld tilbyder specialiserede kurser i database-management

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