21. april 2009 - 22:58Der er
12 kommentarer og 2 løsninger
Delete med en select
Jeg har tabellen TEST. Der er én række hvor felten First er '1'. Og desuden at tid_start er dagen i dag. Jeg ønsker at slette alle række hvor tid_start (datetime) kommer før tid_start på den række hvor First er '1'.
Denne select virker. Her får jeg præcis de rækker hvor tid_start er før den tid_start hvor first='1'. Select * from Test where tid_start < (SELECT tid_start FROM Test WHERE DATE(tid_start)=CURDATE() and first='1')
Men jeg ønsker ikke en select men en delete af samme rækker som ovenfor men det kan jeg ikke få til at virke på samme måde.
DELETE from Test where tid_start < (SELECT tid_start FROM Test WHERE DATE(tid_start)=CURDATE() and first='1')
Jeg får da fejlen: #1093 - You can't specify target table 'Test' for update in FROM clause
Kan nogen fikse den?
Ellers må jeg først udtage resultatet af den inderste Select og derefter lave en ny query hvor jeg foretager sletningen. Men det ville være smartest at gøre det i et hug.
Bare glem det, jeg er vist træt, det vil selvfølgelig ikke virke...
Men, jeg er lidt i tvivl om hvad det er du prøver på? Vil du kun slette alle rækker der har en tid_start der er ældrere end den first='1' har? men kun hvis first='1' tid_start er CURDATE()?
Ja, jeg tror du forstår det rigtigt. Jeg har en masse rækker hvor tid_start er både for i dag og kommende dage. Jeg ønsker at slette alle rækker for i dag og alle kommende dage, MEN først fra et bestemt tidspunkt om morgen. Lad jeg os sige jeg for i dag har 50 rækker hvor tid_start er fra fra i dag mellem kl 01:00-05:00. Så har jeg én rækker kl 06:00 hvor first er sat til 1. Det er fra og med den jeg ønsker rækkerne slettet.
Ja :), det er den nemme løsning som jeg også skriver i bunden af mit første indlæg
"Ellers må jeg først udtage resultatet af den inderste Select og derefter lave en ny query hvor jeg foretager sletningen. Men det ville være smartest at gøre det i et hug."
Jeg håbede på det kunne lade sig gøre på én gang. Jeg kan jo lave en select med en select inden i. Kan man ikke lave en delete med en select inden i??
Er det ikke det jeg skriver i midten af mit første indlæg
"Denne select virker. Her får jeg præcis de rækker hvor tid_start er før den tid_start hvor first='1'. Select * from Test where tid_start < (SELECT tid_start FROM Test WHERE DATE(tid_start)=CURDATE() and first='1')"
Har du læst mit første indlæg ;) hehe, bare for sjov. Kom endelig med foreslag. Ellers springer jeg over hvor hegnet er lavest (og gør det af to gange)
Beklager, havde ikke set du havde ændret lidt i den.
Jeg har prøvet dit forslag men det virker ikke. Selv ikke bare select sætning virker. Både med og uden Delete tingen foran.
SELECT Test.tid_start WHERE DATE(tid_start)=CURDATE() and first='1'
Jeg får fejlen: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE DATE(Test.tid_start)=CURDATE() and first='1')' at line 1
#13 Jeg kender det godt, prøver også så vidt muligt at gøre alt i SQL Statementen, før jeg manipulere via script...
Skal nok hive fat i dig, hvis jeg finder en anden løsning :/
Synes godt om
Ny brugerNybegynder
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.