На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> MySQL, хитрый запрос2
    Сабж. Даны две таблицы
    Первая
    ExpandedWrap disabled
      CREATE TABLE IF NOT EXISTS `table1` (
        `ID` int(11) NOT NULL AUTO_INCREMENT,
        `uid` int(11) NOT NULL,
        PRIMARY KEY (`ID`)
      ) ;

    Вторая, связана с первой "многие к одному" по полю uid
    ExpandedWrap disabled
      CREATE TABLE IF NOT EXISTS `table2` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `uid` int(11) NOT NULL,
        `check_variant` int(10) unsigned NOT NULL,
        `comment` varchar(512) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
      );


    Задача: удалить строки в обоих таблицах при условии table2.comment<>'foo' AND table2.check_variant<100 AND table1.ID=table2.uid
    Можно ли такое упихать в один запрос?
    Сообщение отредактировано: Gonarh -
      Цитата Gonarh @
      Можно ли такое упихать в один запрос?

      Попробуй самостоятельно по мануалу: http://www.mysqltutorial.org/mysql-delete-join/
        Посмотрел, почти то что надо, получилось такое

        ExpandedWrap disabled
          DELETE t1, t2
          FROM t1
          INNER JOIN t2 ON t1.ID = t2.uid
          WHERE t2.comment<>'foo' AND  t2.check_variant<100;

        M
        Просьба оформлять SQL тегом CODE

        если бы не одно но.
        При условии наличия table2.comment='foo' AND table2.check_variant<100 удалять ВООБЩЕ ничего не надо, а такое условие просто не учитывается.
        Сообщение отредактировано: JoeUser -
          ExpandedWrap disabled
            DELETE t1, t2
            FROM t1, t2, (SELECT t2.uid
                          FROM t2
                          GROUP BY t2.uid
                          HAVING SUM(t2.comment='foo' AND t2.check_variant<100) = 0
                         ) t3
            WHERE t1.ID = t2.uid
              AND t2.uid = t3.uid
          ?
            Оно. Вот так меня устроило
            ExpandedWrap disabled
              DELETE t1, t2
              FROM t1, t2, (SELECT t2.uid
                           FROM t2
                           GROUP BY t2.uid
                           HAVING (SUM(t2.comment='foo' AND t2.check_variant<100) = 0) AND (SUM(t2.comment='bar' AND t2.check_variant<100) > 3)
                          ) t3
              WHERE t1.ID = t2.uid
               AND t2.uid = t3.uid
            Сообщение отредактировано: Gonarh -
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0633 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:03 GMT ]