Avatar billede lassel Nybegynder
23. april 2009 - 19:15 Der er 3 kommentarer

UPDATE, SET, FROM with INNER JOIN and WHERE with multiple hits

Hej eksperter,

Jeg har et problem med UPDATE, SET, FROM med flere tabeller INNER JOIN hvor WHERE giver mange hits:

SELECT funktionen fungerer og giver 9 hits med denne:
---
SELECT    ItemInstance.ItemInstanceID, ItemInstance.Year, ItemInstance.Week, WarehouseConfiguration.WarehouseInitials
FROM        ItemInstance
    INNER JOIN Project ON ItemInstance.DestinationProjectID = Project.ProjectID
    INNER JOIN WarehouseConfiguration ON Project.WarehouseID = WarehouseConfiguration.WarehouseID
WHERE    (WarehouseConfiguration.WarehouseInitials = N'Z1') and (ItemInstance.Year = N'2009')
---

Jeg forsøgte med følgende UPDATE:
---
UPDATE ItemInstance
SET ItemInstance.Week = ItemInstance.Week + 1
FROM ItemInstance
    INNER JOIN Project ON ItemInstance.DestinationProjectID = Project.ProjectID
    INNER JOIN WarehouseConfiguration ON Project.WarehouseID = WarehouseConfiguration.WarehouseID
WHERE (WarehouseConfiguration.WarehouseInitials = N'Z1') and (ItemInstance.Year = N'2009')
---

og får denne fejl:
"Msg 512, Level 16, State 1, Procedure UpdateItemInstance, Line 21
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated."

Hvis jeg sætter WHERE til et direkte hit på 1 virker det fint.

Hvad kan jeg gøre?
Avatar billede arne_v Ekspert
24. april 2009 - 01:25 #1
Fejlen lyder som om du laver:

... WHERE felt = (SELECT som returnerer mange rækker)

hvilket ikke virker - man skal bruge:

... WHERE felt IN (SELECT som returnerer mange rækker)

Men jeg kan godt nok ikke lige se det i den postede SQL !?!?
Avatar billede lassel Nybegynder
24. april 2009 - 10:08 #2
Hej Arne,

Tak for dit hurtige indlæg. IN er ikke min stærkeste side, jeg forsøgte med:

WHERE    WarehouseConfiguration.WarehouseInitials IN ('Z1') and ItemInstance.Year IN ('2009')

I min SELECT får jeg det rigtige output, men i UPDATE får jeg stadig samme fejl:

Msg 512, Level 16, State 1, Procedure UpdateItemInstance, Line 21
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
Avatar billede lassel Nybegynder
24. april 2009 - 10:24 #3
Til udpensling; det jeg selvfølgelig vil er at opdatere alle results (i dette tilfælde de 9 linier) med SET ItemInstance.Week = ItemInstance.Week + 1 for hver linie.
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