Можно ли использовать следующий запрос с помощью 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")
Я также попытался добавить возвращаемое значение к моне d, который, как и в случае с select, может добавить это отсутствующее значение. Но это терпит неудачу, потому что для удаления требуется монада типа m()
.
Возможно ли, что это просто отсутствует в Esqueleto?
Я не эксперт по SQL, но 'DELETE FROM table1 INNER JOIN table2' не выглядит как допустимый оператор SQL или, по крайней мере, не является стандартным. Например, PostgreSQL не поддерживает его, и в руководстве предлагается подзапрос для его выполнения. http://www.postgresql.org/docs/9.4/static/sql-delete.html – chi
@chi Это правильно, но '' 'DELETE table1 из таблицы1 INNER JOIN table2''' (обратите внимание на дополнительную таблицу1) должно сработать. Моя проблема в том, что Esqueleto не дает мне способ добавить дополнительную '' 'table1'''. Поскольку нет возможности добавить этот дополнительный параметр, я пробовал без него, думая, что его можно каким-то образом добавить, но он просто принимает этот ошибочный синтаксис в compiletime, что затем приводит к ошибке выполнения. – jamshidh
Из документов, с которыми я связан, PostgreSQL не поддерживает ничего между 'DELETE' и' FROM'. Я согласен с тем, что Эскелету должен вести себя лучше, здесь. – chi