Truy vấn sau có thể sử dụng esqueleto không?Esqueleto: Làm thế nào tôi có thể xóa một mục bằng cách sử dụng một tham gia
DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ItemID
Tôi đã thử:
delete $
from $ \(table1 `InnerJoin` table2) ->
on (table1 ^. Table1ID ==. table2 ^. Table2ItemID)
đó, kỳ quặc đủ, tạo ra một trong các lỗi thời gian chạy duy nhất mà tôi từng thấy trong Haskell
ERROR: syntax error at or near "INNER"
LINE 2: FROM "table1" INNER JOIN "table2" ON "tab...
(về cơ bản, nó được không hài lòng khi số DELETE
bị thiếu "table1")
Tôi cũng đã thử thêm một giá trị trả lại cho mona d, mà, giống như với lựa chọn có thể thêm rằng giá trị còn thiếu. Nhưng điều này không thành công vì xóa yêu cầu một đơn vị loại m()
.
Có thể điều này chỉ bị thiếu trong Esqueleto không?
Tôi không có chuyên gia SQL, nhưng 'DELETE FROM table1 INNER JOIN table2' không giống như câu lệnh SQL hợp lệ hoặc ít nhất không phải là câu lệnh chuẩn. Ví dụ PostgreSQL không hỗ trợ nó, và hướng dẫn cho thấy một truy vấn con để thực hiện điều đó. http://www.postgresql.org/docs/9.4/static/sql-delete.html – chi
@chi Điều đó là đúng, nhưng '' 'DELETE table1 từ table1 INNER JOIN table2''' (lưu ý thêm' table1') nên làm việc. Vấn đề của tôi là Esqueleto không cho tôi cách thêm '' 'table1'''. Vì không có cách nào để thêm tham số phụ này, tôi đã thử mà không, nghĩ rằng nó có thể được thêm vào, nhưng nó chỉ chấp nhận cú pháp lỗi này tại compiletime, sau đó dẫn đến lỗi thời gian chạy. – jamshidh
Từ các tài liệu tôi đã liên kết, PostgreSQL không hỗ trợ bất cứ điều gì giữa 'DELETE' và' FROM'. Tôi đồng ý rằng Esqueleto nên cư xử tốt hơn, ở đây. – chi