簡體   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