使用esqueleto可以进行以下查询吗?
DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ItemID
我试过了:
delete $
from $ \(table1 `InnerJoin` table2) ->
on (table1 ^. Table1ID ==. table2 ^. Table2ItemID)
奇怪的是,它产生了我在Haskell中看到的唯一运行时错误
ERROR: syntax error at or near "INNER"
LINE 2: FROM "table1" INNER JOIN "table2" ON "tab...
(基本上,DELETE
错过了“table1”而感到不高兴。)
我还尝试在monad中添加一个返回值,与select一样,可能会添加该值。但这失败了,因为删除需要一个m ()
类型的monad。
Esqueleto是否可能缺少这个?
答案 0 :(得分:1)
我认为回答这个问题已经很晚了,但是您可以使用EXISTS
DELETE Table1
WHERE EXISTS (SELECT * FROM Table2 WHERE Table1.ID = Table2.ItemID)
答案 1 :(得分:0)
试试这个。
delete $
from $ \(table1 `InnerJoin` table2) -> do
on (just (table1 ^. Table1ID ==. table2 ^. Table2ItemID)
答案 2 :(得分:-3)
在MS SQL中,您可以使用以下方式使用join删除表
DELETE Table1,Table2 FROM Table1 INNER JOIN Table2
WHERE Table1.Id1= Table2.Id1 and Table1.Id1= '1'