2015-09-29 14 views
8

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?

+0

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

+0

@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

+0

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

Trả lời

-3

Trong MS SQL bạn có thể sử dụng bạn có thể xóa bảng sử dụng tham gia sau cách

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

Tôi nghĩ rằng bạn đang thiếu điểm của câu hỏi .... Câu hỏi đặt ra là, làm thế nào thế nào để tôi chuyển đổi truy vấn SQL này thành Esqueleto. Nó dường như không thể. – jamshidh

+0

Ohh xin lỗi ... m không quen thuộc với Esqueleto. . m sql một chàng trai –

0

Hãy thử điều này.

delete $ 
from $ \(table1 `InnerJoin` table2) -> do 
on (just (table1 ^. Table1ID ==. table2 ^. Table2ItemID) 
Các vấn đề liên quan