9

是否可以使用 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 一样,它可能会添加该缺失值。但这失败了,因为 delete 需要一个 monad 类型m ()

Esqueleto 是否可能缺少这点?

4

3 回答 3

1

我认为回答这个问题已经很晚了,但你可以使用 EXISTS

DELETE Table1
WHERE EXISTS (SELECT * FROM Table2 WHERE Table1.ID = Table2.ItemID)
于 2019-08-17T05:48:47.847 回答
0

尝试这个。

delete $
from $ \(table1 `InnerJoin` table2) -> do
on (just (table1 ^. Table1ID  ==. table2 ^. Table2ItemID)
于 2017-08-14T01:25:09.887 回答
-3

在 MS SQL 中,您可以使用以下方式使用 join 删除表

DELETE Table1,Table2  FROM Table1 INNER JOIN Table2
WHERE Table1.Id1= Table2.Id1 and Table1.Id1= '1'
于 2015-10-09T02:52:27.203 回答