È possibile utilizzare la seguente query esqueleto?Esqueleto: come eliminare un elemento utilizzando un join
DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ItemID
ho provato:
delete $
from $ \(table1 `InnerJoin` table2) ->
on (table1 ^. Table1ID ==. table2 ^. Table2ItemID)
che, stranamente, ha generato uno dei pochi errori di runtime che abbia mai visto in Haskell
ERROR: syntax error at or near "INNER"
LINE 2: FROM "table1" INNER JOIN "table2" ON "tab...
(in pratica, è stato scontento del fatto che il DELETE
mancava il "table1")
Ho anche provato ad aggiungere un valore di ritorno al mona d, che, come con select, potrebbe aggiungere quel valore mancante. Ma questo fallisce perché cancellare richiede una monade di tipo m()
.
È possibile che manchi solo a Esqueleto?
Non sono esperto SQL, ma 'ELIMINA DA tabella1 INTERNO JOIN table2' non sembra un'istruzione SQL valida, o almeno non come standard. Ad esempio PostgreSQL non lo supporta, e il manuale suggerisce una subquery per accompagnarla. http://www.postgresql.org/docs/9.4/static/sql-delete.html – chi
@chi Che è corretto, ma '' 'DELETE table1 da table1 INNER JOIN table2''' (nota' extra table1') dovrebbe funzionare. Il mio problema è che Esqueleto non mi dà un modo per aggiungere il '' 'table1'''. Dato che non c'è modo di aggiungere questo parametro extra, ho provato senza, pensando che potrebbe essere aggiunto in qualche modo, ma accetta solo questa sintassi errata al compiletime, che quindi porta a un errore di runtime. – jamshidh
Dalla documentazione collegata, PostgreSQL non supporta nulla tra 'DELETE' e' FROM'. Sono d'accordo sul fatto che Esqueleto dovrebbe comportarsi meglio, qui. – chi