Czy możliwe jest następujące zapytanie za pomocą esqueleto?Esqueleto: Jak usunąć element za pomocą łączenia
DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ItemID
Próbowałem:
delete $
from $ \(table1 `InnerJoin` table2) ->
on (table1 ^. Table1ID ==. table2 ^. Table2ItemID)
który, co dziwne, wygenerowane jeden z niewielu błędów runtime, jaką kiedykolwiek widziałem w Haskell
ERROR: syntax error at or near "INNER"
LINE 2: FROM "table1" INNER JOIN "table2" ON "tab...
(w zasadzie, to było niezadowolony, że DELETE
brakowało "table1")
Próbowałem również dodać wartość zwrotu do Mona d, który podobnie jak w przypadku wyboru może dodać tę brakującą wartość. Ale to się nie powiedzie, ponieważ usuwanie wymaga monady typu m()
.
Czy to możliwe, że tego właśnie brakuje w Esqueleto?
nie jestem ekspertem SQL, ale 'DELETE FROM table1 INNER JOIN table2' nie wygląda tak ważnego SQL, albo przynajmniej nie jako standardowego. Na przykład PostgreSQL go nie obsługuje, a podręcznik sugeruje podkwerendę, aby to osiągnąć. http://www.postgresql.org/docs/9.4/static/sql-delete.html – chi
@chi To prawda, ale '' 'DELETE table1 from table1 INNER JOIN table2''' (zauważ, że dodatkowa' table1') powinno działać. Mój problem polega na tym, że Esqueleto nie daje mi sposobu na dodanie dodatkowego "table1". Ponieważ nie ma sposobu na dodanie tego dodatkowego paramu, próbowałem bez niego, myśląc, że może być w jakiś sposób dodany, ale akceptuje on tę wadliwą składnię podczas kompilacji, co prowadzi do błędu w czasie wykonywania. – jamshidh
Z dokumentów, które łączyłem, PostgreSQL nie obsługuje niczego pomiędzy 'DELETE' i' FROM'. Zgadzam się, że Esqueleto powinien zachowywać się lepiej, tutaj. – chi