2015-09-10 76 views
0

您好@all我的「SQL-Rails-Translation」存在問題。將SQL查詢翻譯成Rails

DELETE FROM bookings WHERE id NOT IN (SELECT MIN(id) FROM bookings GROUP BY personal_id, wbs, date, hours, cost_center)

Booking.delete_all.where('id NOT IN (?)', Booking.select('MIN(id)').group(:personal_id, :wbs, :date, :hours, :cost_center).map(&:id))

我的SQL查詢的工作就像我想要的方式,但我不知道對不對「翻譯」成軌,因爲上面我的整個預訂表的第二行代碼被刪除。

預先感謝您。


更新

我有正確的 「翻譯」 爲我的SQL查詢。

Booking.delete_all(['id NOT IN (?)', Booking.group(:personal_id, :wbs, :date, :hours, :cost_center).pluck('MIN(id)')])

回答

0

我對我的SQL查詢有正確的「翻譯」。

Booking.delete_all(['id NOT IN (?)', Booking.group(:personal_id, :wbs, :date, :hours, :cost_center).pluck('MIN(id)')]) 
0

試試這個

Booking.delete_all('id NOT IN (?)', Booking.select('MIN(id)').group(:personal_id, :wbs, :date, :hours, :cost_center).pluck(:id)) 

你可以給delete_all一些條件more info about delete_all

我更換地圖的勇氣。因爲你只需要該ID,而不是完整的對象

+0

謝謝你的幫助。我試過了,但它不起作用。我收到以下錯誤消息: 'PG :: GroupingError:FEHLER:Spalte「bookings.id」在GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden LINE 1:SELECT「bookings」。「 ID「FROM」預訂「GROUP BY」預訂「。」... ^:SELECT「預訂」。「id」從「預訂」GROUP BY「預訂」。「personal_id」,「預訂」。「wbs」,「預訂「。」日期「,」預訂「,」小時「,」預訂「,」cost_center「 –