2015-09-29 18 views
8

È 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?

+0

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

+0

@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

+0

Dalla documentazione collegata, PostgreSQL non supporta nulla tra 'DELETE' e' FROM'. Sono d'accordo sul fatto che Esqueleto dovrebbe comportarsi meglio, qui. – chi

risposta

-3

In MS SQL si è possibile utilizzare può cancellare tabella utilizzando unirsi seguente modo

DELETE Table1,Table2 FROM Table1 INNER JOIN Table2 
WHERE Table1.Id1= Table2.Id1 and Table1.Id1= '1' 
+0

Penso che ti manchi il punto della domanda .... La domanda è, come faccio a convertire questa query SQL in Esqueleto. Non sembra possibile. – jamshidh

+0

Ohh scusa ... non ho familiarità con Esqueleto. . m sql un ragazzo –

0

Prova questo.

delete $ 
from $ \(table1 `InnerJoin` table2) -> do 
on (just (table1 ^. Table1ID ==. table2 ^. Table2ItemID) 
Problemi correlati