Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Esqueleto:如何使用连接删除项目_Sql_Haskell_Esqueleto - Fatal编程技术网

Sql Esqueleto:如何使用连接删除项目

Sql Esqueleto:如何使用连接删除项目,sql,haskell,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:

使用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
缺少“表1”是令人不快的)

我还尝试向monad添加一个返回值,这与select一样,可能会添加缺少的值。但这失败了,因为delete需要类型为
m()
的monad


是否可能Esqueleto中缺少此项?

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

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

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)

我不是SQL专家,但是
DELETE FROM table1 internal JOIN table2
看起来不是有效的SQL语句,或者至少不是标准的SQL语句。例如,PostgreSQL不支持它,手册建议使用子查询来实现这一点@chi这是正确的,但是
从表1中删除表1内部联接表2
(注意额外的
表1
)应该可以工作。我的问题是Esqueleto没有给我添加额外
表1
的方法。由于无法添加这个额外的参数,我尝试不添加,认为它可能会以某种方式被添加,但它只是在编译时接受这个错误的语法,这会导致运行时错误。从我链接的文档中,PostgreSQL不支持
DELETE
From
之间的任何内容。在这里,我同意Esqueleto应该表现得更好。@chi我做了一些进一步的研究,你是对的,这似乎是某些DBs(ie-MySQL)支持的扩展,但不在标准中,特别是在Postgresql中。我不确定Esqueleto在支持扩展方面的理念,但事实证明,我实际上使用的是Postgresql(不确定您是如何知道的:),所以这并不重要。既然这个问题对我来说就到此为止了,请随意将您的评论升级为soln,我相信您……我认为您没有抓住问题的重点。。。。问题是,如何将此SQL查询转换为Esqueleto。这似乎是不可能的哦对不起。。。I’我对埃斯奎莱托不熟悉。我是个男人