Ваш псевдоним 't' не используется. Просто попробуйте это :)
DELETE FROM table
WHERE columnA IN (SELECT columnA
FROM table
GROUP BY columnA
HAVING COUNT(*) > 1);
Если вы имеете дело с Hibernate попытаться использовать Hibernate Query Language (HQL). Например, мы используем HQL для удаления объектов с большей гибкостью, таких как удаление продуктов, чьи цены превышают указанную сумму.
Query query = session.createQuery("delete Product where price > :maxPrice");
query.setParameter("maxPrice", new Float(1000f));
int result = query.executeUpdate();
if (result > 0) {
System.out.println("Expensive products was removed");
}
Вы также можете использовать метод выполнения (действие HibernateCallback) из класса HibernateTemplate. Это может выглядеть так:
final Criterion criteria;
HibernateTemplate template;
template.execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
List toDelete = session.createCriteria(Student.class).add(criteria).list();
for (Object o: toDelete){
session.delete(o);
}
}
});
IMHO это решение не очень эффективно, потому что вы должны прочитать все записи перед их удалением. Более того, вы должны удалить каждую запись отдельно, что очень неэффективно.
Что это за сирота 't'? – Vihar
@Vihar Подзапрос псевдоним –
, но не использовался, поэтому сирота – Vihar