2015-09-29 15 views
8

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?

+0

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

+0

@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

+0

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

Odpowiedz

-3

w MS SQL można używać Można skasować tabeli przy użyciu udziału w następujący sposób

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

Myślę, że brakuje ci sensu pytania ... Pytanie brzmi, jak przetworzyć to zapytanie SQL na Esqueleto. To nie wydaje się możliwe. – jamshidh

+0

Ohh przepraszam ... nie znam Esqueleto. . m sql a guy –

0

Spróbuj tego.

delete $ 
from $ \(table1 `InnerJoin` table2) -> do 
on (just (table1 ^. Table1ID ==. table2 ^. Table2ItemID) 
Powiązane problemy