Just nu i M3-nätverket
Jump to content

Underfråga med flera vilkor som ska uppfyllas


Erki

Recommended Posts

Vet inte riktigt hur jag bäst förklarar mitt problem så en bild med exempel på tabell förklarar kanske mer.

 

Jag vill uppdatera poster som som uppfyller vissa vilkor, dessa ska ändras till 1 i fältet Status.

 

I exemplet är det posterna 1, 6, 8 då de har

1. Status 0

2. Det finns ingen post där Datum är lägre OCH Information är samma OCH Inlagd_av är samma OCH har Status 1.

 

Post 7 ska inte uppdateras då post 2 har lägre datum, samma värde i information och Inlagd_av och har status 1.

 

Jag har vänt och vridit på detta men får inte till det. Det riktiga fallet ska köras på en Oracle-databas men den tabellen innehåller fler fält, ingen av dessa ska dock vara med i vilkoren. Den riktiga tabellen har ingen Idkolumn.

 

[bild bifogad 2006-10-20 21:33:09 av Erki]

[inlägget ändrat 2006-10-21 15:49:39 av Erki]

876902_thumb.jpg

Link to comment
Share on other sites

Testa följande (antar att tabellnamnet är "ttt"):

 

select *

from ttt

left join

(

select min(Datum), Information, Inlagd_av

from ttt

where Status=1

group by Information, Inlagd_av, Status

) as exclude(Datum,Information,Inlagd_av) on ttt.Information=exclude.Information and ttt.Inlagd_av=exclude.Inlagd_av

where status=0

and exclude.Datum is null

 

 

Men, jag får det att till att vara endast rad 1 o 6 som är aktuella enligt reglerna. Rad 8 undantas då rad 3 ser ut att ha samma värden.

 

Mvh

Johan Olofsson

 

 

Link to comment
Share on other sites

Du har rätt, rad 8 ska inte med.

 

Så här långt har jag också kommit nu även om jag använde en annan variant.

 

Select Information, Inlagd_av, Status from ttt

where status = 0

MINUS

Select Information, Inlagd_av, Status from ttt

where status =1

 

Problemet är att i dessa rader ska Status ändras. Hur binder jag ihop Update satsen med det övriga.

 

UPDATE ttt

Set Status =1

where....

 

Jag har aldrig gjort annat än typ UPDATE tabA Set x= y

where... eller UPDATE tabA Set x= (select x from ....

 

Link to comment
Share on other sites

typ såhär:

 

update ttt set status=1

from ttt

left join

(

select min(Datum), Information, Inlagd_av

from ttt

where Status=1

group by Information, Inlagd_av, Status

) as exclude(Datum,Information,Inlagd_av) on ttt.Information=exclude.Information and ttt.Inlagd_av=exclude.Inlagd_av

where status=0

and exclude.Datum is null

 

/johan

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...