• Как выводить записи не раннее получаса и не позднее часа в sql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WHERE created_at BETWEEN CURRENT_TIMESTAMP - INTERVAL 1 HOUR
                         AND CURRENT_TIMESTAMP - INTERVAL 30 MINUTE
    Ответ написан
    Комментировать
  • Как вычесть у одного пользователя число и добавить его другому?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Лучше делать всё в одном запросе:
    UPDATE users u1
    CROSS JOIN users u2
    SET u1.amount = u1.amount - $summa,
        u2.amount = u2.amount + $summa
    WHERE u1.id = $client
      AND u2.id = $shop;


    Во-первых, один запрос - проще. Пусть даже сам запрос и сложнее.

    Во-вторых, если, например, в структуре таблицы имеется ограничение CHECK (amount >= 0), а сумма такова, что у клиента баланс уйдёт в минус - в таком случае ни одна из записей не будет изменена.
    Ответ написан
    Комментировать
  • Что не так с моим запросом?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT main.id,
           ( SELECT COUNT(*) 
             FROM news 
             WHERE main.id = news.main_id ) news,
           ( SELECT COUNT(*) 
             FROM articles
             WHERE main.id = articles.main_id ) articles
    FROM main
    ORDER BY news DESC;


    Предполагается, что main(id) есть уникальное поле (скорее всего первичный ключ).
    Ответ написан
    2 комментария
  • Как удалить дубликаты Oracle SQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вывод дубликатов:
    SELECT t1.*
    FROM table t1
    WHERE EXISTS ( SELECT NULL
                   FROM table t2
                   WHERE t1.id <> t2.id -- выражение первичного ключа
                     AND t1.column = t2.column -- для всех полей, кроме первичного ключа


    Удаление:
    DELETE 
    FROM table t1
    WHERE EXISTS ( SELECT NULL
                   FROM table t2
                   WHERE t1.id > t2.id -- оставить только запись с минимальным ID
                     AND t1.column = t2.column
    Ответ написан
  • Может ли роскомнадзор заблокировать домен третьего уровня appspot.com?

    @Akina
    Сетевой и системный админ, SQL-программист.
    РКН не блокирует домены - блокируются IP-адреса (диапазоны, подсети).

    Чисто теоретически - РКН может потребовать изменения записи DNS-зоны для домена (в т.ч. 3 уровня) так, чтобы он не обеспечивал корректного разрешения в адрес и обращения к ресурсу, при условии что данный домен поддерживается Российским оператором. Но я плохо представляю, как это можно выполнить технически, не нарушая стандартов (разве что просто удалить зону нафиг, на что оператор вряд ли пойдёт). К тому же никто не запрещает прописать соответствия локально и не обращаться к DNS за разрешением.
    Ответ написан
    Комментировать
  • Как подсчитать кол-во записей нескольких столбцов?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT value,
           SUM(value = val1) total_1,
           SUM(value = val2) total_2
    FROM ( SELECT val1 value FROM test
           UNION 
           SELECT val2 FROM test ) total
    CROSS JOIN test
    GROUP BY value
    ORDER BY value;

    DEMO

    Само собой если некоего значения нет ни в одном из полей, его не будет и в результате.
    Ответ написан
    Комментировать
  • Как можно добавить данные в несколько таблиц через один insert into?

    @Akina
    Сетевой и системный админ, SQL-программист.
    MySQL не поддерживает многотабличный INSERT.

    Варианты:
    1. Хранимая процедура
    2. Триггер (но нужно решать проблему с передачей параметров для остальных таблиц)
    Ответ написан
    9 комментариев
  • Можно ли настроить DHCP и статику одновременно?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если устройство добавлено в контроллер домена то присваивается статический ip-адрес из сети 192.168.1.0/24

    Статический адрес присваивается на устройстве. Сервер в этом процессе не участвует, вообще никак.
    Ответ написан
  • Как исправить Fatal error in defaults handling. Program aborted?

    @Akina
    Сетевой и системный админ, SQL-программист.
    mysql думает что в файле отсутствует группа, но там все есть

    Чудес не бывает. Если сервер считает, что файл кривой, то он прав. А ты чего-то не замечаешь.

    пробовал ставить кодировку ANSI

    Должен быть чистый ASCII.
    Ответ написан
    Комментировать
  • Почему value="" записывает пустоту, а не NULL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    NULL и пустая строка есть две совершенно разные вещи (исключение - Оракл). NULL - это отсутствие любого, в том числе пустого, значения.
    Ответ написан
    Комментировать
  • Как отыскать в сети vlan'ы которые отображаются на роутере но нету на свитче?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Нарисуйте полную схему магистральных соединений сети. Всё активное L2 оборудование, все соединения между ними с номерами портов на каждой стороне. На каждой единице оборудования по каждому магистральному порту проверьте, что на нём имеются только tagged VLANы, а по каждому клиентскому (включая неиспользуемые) - только один untagged VLAN.

    Если это не так (а, судя по описанию, именно такое состояние вещей и обнаружится) - составьте нужный план VLANов и план перенастройки оборудования на эту схему без прекращения предоставления услуги. И реализуйте. И сеть в порядок приведёте, и будете знать, что и где бегает.

    Да, не забудьте отдельный управляющий VLAN, чтобы рулить оборудованием. И не используйте VLANID=1.
    Ответ написан
    8 комментариев
  • Как можно сделать чтобы из друх таблиц информация объединялась в одну?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Удалить таблицу main - за полной её ненадобностью и бессмысленностью. Вместо неё создать представление на основе остальных двух таблиц,
    Ответ написан
    Комментировать
  • Как правильно сделать запрос в бд?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT *
    FROM chat
    WHERE NOT EXISTS ( SELECT NULL
                       FROM group_chat 
                       WHERE chat.id = chat_id
                         AND group_id = 9 )

    Кстати, заменив NOT EXISTS на EXISTS, можно получить тот же результат, что и в запросе из текста вопроса. При правильном индексировании он будет, скорее всего, даже более эффективен.
    Ответ написан
  • Как в таблицу SQL добавить столбец с аналогичной второй таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В простом варианте:

    SELECT 500 queue, operator, os.avg_os, ss.avg_ss
    FROM ( SELECT operator,AVG(valuation) avg_os
           FROM oper_survey 
           WHERE queue = '500' AND `date` BETWEEN '2021-06-01' AND '2021-06-16' 
           GROUP BY operator ) os
    JOIN ( SELECT operator, AVG(valuation) avg_ss
           FROM service_survey 
           WHERE queue = '500' AND `date` BETWEEN '2021-06-01' AND '2021-06-16' 
           GROUP BY operator ) ss USING (operator)


    Более сложный вариант - какой-то operator отсутствует в одной из таблиц. Тогда надо собрать список из обеих таблиц, и к нему привязывать считающие подзапросы.

    SELECT 500 queue, operator, COALESCE(os.avg_os, 0) avg_os, COALESCE(ss.avg_ss, 0) avg_ss
    FROM ( SELECT operator FROM oper_survey WHERE queue = '500'
           UNION 
           SELECT operator FROM service_survey WHERE queue = '500' ) op
    LEFT JOIN ( SELECT operator,AVG(valuation) avg_os
                FROM oper_survey 
                WHERE queue = '500' AND `date` BETWEEN '2021-06-01' AND '2021-06-16' 
                GROUP BY operator ) os USING (operator)
    LEFT JOIN ( SELECT operator, AVG(valuation) avg_ss
                FROM service_survey 
                WHERE queue = '500' AND `date` BETWEEN '2021-06-01' AND '2021-06-16' 
                GROUP BY operator ) ss USING (operator)
    Ответ написан
    Комментировать
  • Как выполнить подзапрос в SQL (SELECT с передачей параметра из основного запроса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT users.name AS username,
           count(orders.id) AS orders_count 
    FROM users
    JOIN orders ON orders.user_id=users.id
    GROUP BY users.name

    Если нужно вывести и пользователей, у которых нет заказов, с нулевым количеством, то использовать LEFT JOIN.

    PS. Запрос из текста вопроса тоже корректен и должен дать правильный результат. Причём с 50% вероятностью он будет преобразован в мой (точнее, оба дадут один и тот же план выполнения). Остальные 50% - на то, что он будет выполнен итерационно (и тогда скорее всего просто будет выполняться дольше).
    Ответ написан
    2 комментария
  • Репликация MySQL 8?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Правильно ли понимаю, что в случае отказа слейва на какое-то условное кол-во времени за которое mysql-bin.log заротейтится при достижении условных 100М, то при восстановлении слейв сервера, данные, которые находятся уже в архивном логе не будут записаны?


    Нет, неправильно.

    max_binlog_size устанавливает размер ОДНОГО файла лога. Когда указанный размер достигнут, создаётся новый, и запись идёт уже в него. А старый никуда не девается, и будет нормально передан на слейв, когда его функционирование восстановится.
    Ответ написан
  • Ошибка SQL HASMGR?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Таблица, на которую ссылается внешний ключ, должна существовать на момент создания ключа (т.е. должна быть создана ранее).

    То есть надо бы изменить порядок создания таблиц. Сначала создать SALEREPS, и только потом OFFICES...

    ---

    Но вообще структура какая-то бредовая. Одна таблица имеет FK на другую, которая имеет FK на первую... как-то логики совсем не прослеживается.

    И просто пересортировкой порядка создания таблиц такое не лечится. Сначала все таблицы, потом все внешние ключи - единственное решение... но сперва надо разобраться с логикой зависимостей таблиц.

    ---

    И это... всегда указывайте точно поле, на которое должен ссылаться внешний ключ. Не надейтесь на умолчания.
    Ответ написан
    Комментировать
  • Как можно увеличить скорость запроса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT TOP 500 * 
    FROM [table] 
    WHERE  NOT EXISTS ( SELECT NULL 
                        FROM [Entities] 
                        WHERE [column] = '2' 
                          AND [table1].[Id] = [ClientTableId] )


    PS. Наличие индекса Entities (column, ClientTableId) - приветствуется. Впрочем, может, Entities (ClientTableId, column) окажется лучше - зависит от статистики данных.

    PPS. TOP 500 без указания ORDER BY есть штука малоосмысленная.
    Ответ написан
    2 комментария
  • Есть ли способ автоматически добавить все пустые строки в MySQL с AUTO_INCREMENT до какого-то максимального значения?

    @Akina
    Сетевой и системный админ, SQL-программист.
    создать миллион пустых строк

    WITH RECURSIVE 
    cte AS ( SELECT 1 n
             UNION ALL
             SELECT n + 1  FROM cte WHERE n < 1000 )
    INSERT INTO tablename (id)
    SELECT NULL FROM cte t1 CROSS JOIN cte t2;
    Ответ написан
    Комментировать
  • Как восстановить файл после удаления из корзины?

    @Akina
    Сетевой и системный админ, SQL-программист.
    восстановить файл после удаления из корзины
    удалил txt файлик с рабочего стола

    С рабочего стола в корзину, а потом из корзины?

    Выключить компьютер (лучше - жёстко, прям дёрнув кабель питания, ибо система авось не сдохнет, а вот каждая секунда работы уменьшает вероятность успешного восстановления). Загрузиться с LiveCD/DVD/flash. Затем

    1) запустить сканер удалённых файлов (рекомендую Recuva) от имени SYSTEM (через ps.exe) и смотреть удалённые файлы в папке корзины.

    На имя не обращать внимания - при помещении в корзину файл переименовывается. Однако расширение сохраняется. Так что смотреть все найденные .TXT файлы - что внутри. Не удивляться, если найдётся несколько копий - взять наиболее свежую,

    Если не помогло, то

    2) запустить сканер с прямым доступом к диску (рекомендую DMDE) и искать по известному содержимому файла (подстрока 10-20 символов, но более-менее оригинальная) в неиспользуемом пространстве диска либо вообще по всему диску. найденные куски (их скорее всего будет много) копировать, и потом из них воссоздать файл (впрочем, есть шанс, что найдётся текст из файла целиком).
    Ответ написан
    Комментировать