SkarreMedlem sedan apr. 20012 427 inlägg Jag har stött på en kalender där man sparar evenemang i en tabell, och tider och datum för dessa i en annan. Ett evenemang kan alltså ha fler datum/tider.
Så här ser evenemangstabellen (events) ut (ungefär)
id
title
descr
Så här ser tabellen med datum/tider (eventDates) ut (ungefär)
id
eventid (FK till tabellen ovan)
eventdate
Nu vill jag radera alla evenemang vars sista datum passerat och undrar om någon kan hjälpa mig på traven. Jag måste ju radera både evenemangen och dess tider, men jag har trots försök med konstiga grupperingar och joins etc. inte kommit fram till något som funkar.
Så fort jag försöker med ett villkor på MAX(eventdate) får jag veta att
An aggregate may not appear in the WHERE clause
Alla tankar och förslag är välkomna!
@ndersMedlem sedan juni 200032 969 inlägg Vad är det för dbms vi pratar om?
Det skulle ju kanske vara en idé att sätta ON DELETE CASCADE om ens dbms stödjer det?
Annars får du använda två frågor. Först radera i eventDates, och sedan i Events.
Mvh
SkarreMedlem sedan apr. 20012 427 inlägg Oj, glömde säga det, det är MS SQL Server. Problemet med att först radera datumen, och sedan evenemangen är att endast evenemang vars senaste datum har passerat ska bort. Har evenemanget fortfarande ett datum idag eller senare så ska det, och dess andra datum vara kvar.
SELECT eventid FROM eventDates
[red]WHERE MAX(eventdate) ...[/red]
GROUP BY eventid
Ungefär så långt kommer jag när jag laborerar. Mittenraden funkar ju såklart inte.
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
Jag är inte tillräckligt haj på SQL för att komma runt detta.
LarsGMedlem sedan dec. 200012 464 inlägg delete from events
where not exists
(select *
from eventDates
where eventDate >= getdate()
and eventid = events.id)
då förutsätter jag att du har en fk med on delete cascade så att posterna i eventDates också försviner