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

Модераторы: Akina
  
> MySQL, хитрый запрос3
    Сабж, даны две идентичные по структуре таблицы допустим t1 и t2
    Есть запрос вида:
    ExpandedWrap disabled
      SELECT field1+1 as f1, SUM(summa) as sum1 FROM t1 WHERE f2 BETWEEN 10 AND 20 AND f3 NOT LIKE "%ololo%" GROUP BY f1 ORDER BY f1

    Уверен что можно применить данный запрос к обеим таблицам и суммировать результат, знаю что есть INNER JOIN и UNOIN ALL но как их применить, хз, гуглёж внятного объяснения не дал. Может кто пнуть в нужном направлении?

    Добавлено
    Хмм, поторопился, вот так оно работает:

    ExpandedWrap disabled
      SELECT field1+1 as f1, SUM(summa) as sum1 FROM (
           SELECT * FROM t1 WHERE f2 BETWEEN 10 AND 20 AND f3 NOT LIKE "%ololo%"
           UNION ALL
           SELECT * FROM t2 WHERE f2 BETWEEN 10 AND 20 AND f3 NOT LIKE "%ololo%" ) t
      GROUP BY f1 ORDER BY f1
    Сообщение отредактировано: Gonarh -
      С точки зрения скорости исполнения лучше объединять окончательные запросы:

      ExpandedWrap disabled
        SELECT f1, SUM(sum1) AS sum1
        FROM ( SELECT field1+1 AS f1, SUM(summa) AS sum1
               FROM t1
               WHERE f2 BETWEEN 10 AND 20
                 AND f3 NOT LIKE "%ololo%"
               GROUP BY f1
             UNION ALL
               SELECT field1+1, SUM(summa)
               FROM t2
               WHERE f2 BETWEEN 10 AND 20
                 AND f3 NOT LIKE "%ololo%"
               GROUP BY f1
             ) AS total
        GROUP BY f1
        ORDER BY f1
        Дабы не плодить тем. Спрошу тут.
        Есть две таблицы 'foo' и 'bar'
        в обеих есть поле username, необходимо скопировать в таблицу foo поле password с таблицы bar по критерию bar.field3 = 'ololo', пробую так:

        ExpandedWrap disabled
          UPDATE foo SET password=bar.password WHERE foo.username=bar.username AND bar.field3 = 'ololo'

        Выдаёт
        Unknown column 'bar.username' in 'where clause'
        Сообщение отредактировано: Gonarh -
          Если кто будет искать
          ExpandedWrap disabled
            UPDATE foo, bar SET foo.password=bar.password WHERE foo.username=bar.username AND bar.field3 = 'ololo'
          Сообщение отредактировано: Gonarh -
            Gonarh
            Лучше стараться использовать JOIN-синтаксис, а не картезианку:
            ExpandedWrap disabled
              UPDATE foo
              JOIN bar ON foo.username=bar.username
              SET foo.password=bar.password
              WHERE bar.field3 = 'ololo'
              Учту про синтаксис
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0239 ]   [ 15 queries used ]   [ Generated: 28.05.24, 21:06 GMT ]