2016-03-02 3 views
1

Я использую mysql. После запроса работает в тузде браузере, но когда я использую этот запрос в спящем режиме, что дает мне исключение вблизи внутреннему выбор, как:Удалить не работает в спящем режиме

unexpected token: (near line 1, column 104 

Это дает ошибку на втором пункте выбора.

Запрос является:

delete from table 
where columnA in (
    select columnA 
    from (
     select columnA 
     from table 
     group by columnA 
     having count(*) > 1 
    ) t 
) 

ли кто-нибудь есть идеи, почему это так, и как решить это?

+0

Что это за сирота 't'? – Vihar

+0

@Vihar Подзапрос псевдоним –

+0

, но не использовался, поэтому сирота – Vihar

ответ

0

Ваш псевдоним '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 это решение не очень эффективно, потому что вы должны прочитать все записи перед их удалением. Более того, вы должны удалить каждую запись отдельно, что очень неэффективно.

+0

он дает ошибку: «Вы не можете указать таблицу назначения для обновления в предложении FROM» –

+0

Почему вы используете собственный SQL в Hibernate. Вместо этого используйте функции Hibernates :) –

+0

Я использую hql-запрос. Я преобразовал его в hql, но в hql он не работает. –

Смежные вопросы