繁体   English   中英

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

[英]Esqueleto: How can I delete an item using a join

使用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一样可能会添加该值。 但这失败了,因为删除需要mad m ()类型的monad。

这可能是Esqueleto遗失的吗?

试试这个。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM