Помогите составить запрос

Тема в разделе "Базы данных", создана пользователем roddik, 23 июл 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. roddik

    roddik Колбаска

    Регистр.:
    26 янв 2007
    Сообщения:
    351
    Симпатии:
    285
    Привет, пробую такой запрос
    DELETE FROM `domains` `d` WHERE (SELECT COUNT(1) FROM `posts` WHERE `domain` = `d`.`id`) = 0
    Соответственно надо удалить из таблицы все домены, по которым нету постов, но нужно в подзапросе указать, что айдишник берется от домена, а не от поста. Запрос выше не работает -
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`d` WHERE (SELECT COUNT(1) FROM `posts` WHERE `domain` = `d`.`id`) = 0' at line 1

    Как исправить?
     
  2. .WishMaster.

    .WishMaster. Создатель

    Регистр.:
    15 июл 2009
    Сообщения:
    27
    Симпатии:
    0
    попробуйте так
    Код:
    DELETE FROM `domains` AS `d` WHERE (SELECT COUNT(*) FROM `posts` WHERE `domain` = `d`.`id`) = 0
    Если можно структуру таблиц domains и posts
     
  3. BaziliX

    BaziliX Постоялец

    Регистр.:
    2 авг 2007
    Сообщения:
    85
    Симпатии:
    12
    Возможно будет проще скриптом извлечь сначала домены с 0 постов, а потом их удалить.
     
  4. roddik

    roddik Колбаска

    Регистр.:
    26 янв 2007
    Сообщения:
    351
    Симпатии:
    285
    .WishMaster., #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `d` WHERE (SELECT COUNT(*) FROM `posts` WHERE `domain` = `d`.`id`) = 0' at line 1

    BaziliX, понятно, что можно сделать так, но вот в самом мускуле тоже должно быть возможно
     
  5. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    delete from domains where id not in (select domain from posts)
     
    roddik нравится это.
  6. .WishMaster.

    .WishMaster. Создатель

    Регистр.:
    15 июл 2009
    Сообщения:
    27
    Симпатии:
    0
    это лучше извлечь в виде множнства в запросе, а потом уже удалять
    Точный запрос смогу написать когда дадите структуру таблиц
     
  7. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    Глупости:D
     
  8. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Покрасивше, так

    Код:
    DELETE 
    FROM `domains`
    FROM `domains` `d` WHERE (SELECT COUNT(*) FROM `posts` WHERE `domain` = `d`.`id`) = 0
    либо попроще так

    Код:
    DELETE
    FROM `domains` 
    WHERE id IN 
        (SELECT d.id FROM `domains` `d` WHERE  
                (SELECT COUNT(*) FROM `posts` WHERE `domain` = `d`.`id`) = 0)
    
     
Статус темы:
Закрыта.