sql - Esqueleto:如何使用联接删除项目

标签 sql haskell esqueleto

是否可以使用 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 需要一个类型为 m () 的单子(monad)。 .

Esqueleto 是否可能缺少这点?

最佳答案

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

DELETE Table1
WHERE EXISTS (SELECT * FROM Table2 WHERE Table1.ID = Table2.ItemID)

关于sql - Esqueleto:如何使用联接删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835427/

相关文章:

sql - Ruby on Rails : joining two tables on something other than the standard foreign key

sql - 用户帐户表、盐和哈希的第三范式

haskell - 如何解构 SNat(单例)

php - 将 X 个数组主菜转换为单个变量

sql - 带有绑定(bind)变量的 Oracle SQL 跟踪

postgresql - Esqueleto `selectDistinct` 不工作

haskell - 如何在 Esqueleto 查询中使用 Group By 和 Sum

haskell - 使用 Esqueleto 进行外部连接

haskell - 将函数提升至 Conduit Sink

haskell - 镜头生成是否应该像实例一样对待