Задать вопрос
  • Возможно ли одним запросом разрешить null во всех столбцах?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если речь об одной таблице - да, все поля могут быть откорректированы одним ALTER TABLE.
    Если о нескольких - то для каждой таблицы нужно будет выполнить отдельный запрос.
    Ответ написан
    Комментировать
  • С чего начать системному администратору в школе?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Сначала - инвентаризация. Понять, что есть.
    Затем - проект. Понять, что предстоит сделать и что должно получиться в конце.
    Далее - бюджет. Убедиться, что бюджет достаточен для реализации проекта, включая непредвиденные расходы, резервирование и прочие форсмажоры.
    Если всё соответствует - можно начинать. Иначе даже не надо начинать - когда не получится, виноватого долго искать не придётся.
    Ответ написан
    Комментировать
  • Как узнать, имеет ли столбец unique?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Сведения об UNIQUE constraint (включая и PRIMARY KEY) могут быть получены запросами
    SELECT *
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE TABLE_SCHEMA = DATABASE() /* либо 'database_name' */
      AND TABLE_NAME = 'table_name'
    
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'table_name'


    The INFORMATION_SCHEMA KEY_COLUMN_USAGE Table
    The INFORMATION_SCHEMA COLUMNS Table
    Ответ написан
  • Как разбить сети на подсети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Нужно разбить сеть 172.16.1.0 /23 на подсети А=25, В=60, С=150

    Если приведённые значения - это число хостов на подсеть, то это будут подсети /27, /26 и /24. И соответственно

    172.16.1.0/24
    172.16.2.0/26
    172.16.2.64/27

    PS. Задание некорректно. 172.16.1.0/23 - это не сеть, а хост в сети 172.16.0.0/23.
    Ответ написан
    5 комментариев
  • Почему не работает !=ALL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Правильно ругается. Документацию читать надо, а не сомнительные комментарии к ней.

    Выражение при использовании операторов ALL, SOME, ANY может быть только и исключительно набором данных, а не набором скалярных значений. Применительно к SQL Server - только подзапросом. Можно, конечно, попробовать использовать функцию, возвращающую набор данных, но сильно сомневаюсь, что получится.

    ALL (Transact-SQL)

    Так что синтаксически правильно так:
    Select * 
    from Employees
    where [Employee ID] != ALL ( SELECT 90 UNION SELECT NULL );

    Хотя и неправильно логически - наличие в списке NULL однозначно приведёт к пустому набору данных.
    Ответ написан
  • Какой запрос для выборки данных с двух таблиц в этом примере?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT categories.id, 
           categories.slug,  
           ct_ru.title title_ru,  
           ct_en.title title_en,  
           ct_de.title title_de
    FROM categories
    LEFT JOIN category_translations ct_ru ON category_translations.category_id=categories.id 
                                         AND category_translations.locale = 'ru'
    LEFT JOIN category_translations ct_en ON category_translations.category_id=categories.id 
                                         AND category_translations.locale = 'en'
    LEFT JOIN category_translations ct_de ON category_translations.category_id=categories.id 
                                         AND category_translations.locale = 'de';
    Ответ написан
    Комментировать
  • Как копировать данные из таблицы одной БД в другую БД по регламенту?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как это сделать в MYSQL Workbench

    Никак. Более того - никогда не делать ничего инструментом, для текущей задачи непредназначенным.

    Возможно, с помощью самого MYSQL

    Именно.
    Using the Event Scheduler
    Ответ написан
    Комментировать
  • Как правильно сделать запрос с поиском текста?

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    как сформировать запрос чтоб было равенство 2021-10-30 23:59:59 = 10.21

    Если критерий предоставляется именно в такой форме - '10.21',- то
    SELECT * 
    FROM `table` 
    JOIN ( SELECT '10.21' AS parameter) criteria
        ON  `date` >= CONCAT('20', SUBSTRING_INDEX(parameter, '.', -1), '-', SUBSTRING_INDEX(parameter, '.', 1), '-', '01' AS DATE)
        AND `date` < CONCAT('20', SUBSTRING_INDEX(parameter, '.', -1), '-', SUBSTRING_INDEX(parameter, '.', 1), '-', '01' AS DATE) + INTERVAL 1 MONTH

    Условие - SARGable.
    Ответ написан
    Комментировать
  • Как вывести все остальные поля при операции GROUP BY?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY score DESC) rn
        FROM source_table
    )
    SELECT *
    FROM cte
    WHERE rn = 1
    -- ORDER BY score DESC LIMIT nnn
    ;
    Ответ написан
    Комментировать
  • Как сконфигурировать сеть так, чтобы сброс роутера не приводил к конфликту в сети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Провайдер даёт услуги на своём порте. Доступ к Интернету. Телефония.

    А вот дальше потреблять эти услуги и регулировать их потребление ты должен самостоятельно. Так что по уму - оба роутера подключаются к своему роутеру (@Drno правильно предложил), который обеспечивает трансляцию этих сервисов в точки потребления.
    Ответ написан
    Комментировать
  • Какая сложность под капотом у сравнения строка?

    @Akina
    Сетевой и системный админ, SQL-программист.
    o(n) и O(m*n), где m - длина строки.
    Ответ написан
    Комментировать
  • Как в триггере сделать проверку, что изменение вызвал другой триггер?

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

    Для решения задачи необходимо использовать внешние средства передачи данных. Поскольку весь каскад триггеров работает в одном соединении, проще всего использовать определённые пользователем переменные с предопределёнными именами, которые инициализируются на старте триггера и сбрасываются на его финише:

    CREATE TRIGGER trigger_name
    EVENT ACTION ON table_name
    FOR EACH ROW
    BEGIN
        SET @trigger_name_table_name = CONCAT('executed, ', 'column_value=', NEW.column);
    -- trigger action
        SET @trigger_name_table_name = NULL;
    END;

    Если в теле триггера определены EXIT хэндлеры - они тоже должны выполнять соответствующие сбросы.
    Ответ написан
    Комментировать
  • Будет ли использоваться индекс в запросе вида WHERE `field1` LIKE '_aa_a_'?

    @Akina
    Сетевой и системный админ, SQL-программист.
    будет ли использоваться индекс в запросе вида WHERE `field1` LIKE '_aa_a_'?

    50/50 - или будет, или нет.

    Однако если он будет использоваться, то не как индекс (сортированный список для выполнения index seek), а как компактная копия таблицы (как несортированный список для выполнения index scan).

    Тем не менее профит от использования индекса таким образом может быть, и весьма значительный. Главным образом он определяется соотношением размера записи к размеру поля. И чем это соотношение выше, тем более вероятен профит.
    Ответ написан
    1 комментарий
  • Как быстро найти совпадение в базах?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT *, 'db1' AS dbasename
    FROM db1.tablename
    WHERE phone = '123-45-67'
    UNION ALL
    SELECT *, 'db2'
    FROM db2.tablename
    WHERE phone = '123-45-67'
    UNION ALL
    ...

    Если список баз не фиксирован и должен формироваться в рантайме - то хранимая процедура с запросом по INFORMATION_SCHEMA.TABLES и динамическим SQL.
    Ответ написан
    Комментировать
  • Как поставить запрет на переименования корзины в Windows 7?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Наименование корзины хранится в HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}.

    Чтобы запретить изменение наименования, нужно изменить разрешения на этот раздел. По умолчанию юзер наследует на него полный доступ. Надо отключить наследование, а затем для юзера сменить его на "Только чтение".

    Побочным эффектом будет утрата возможности изменения иконок пустой/полной корзины. Впрочем, на подраздел с этими ключами (DefaultIcon) можно отдельно дать юзеру полные права. И даже лучше это сделать - иначе попытка смены десктопной темы может свалиться по ошибке (не пробовал).
    Ответ написан
    Комментировать
  • Как правильно выбрать все товары?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT p.name, p.id 
    FROM products AS p
    JOIN product_country AS cp ON cp.product_id = p.id 
    WHERE cp.country_id IN (1,2)
    GROUP BY 1, 2
    HAVING COUNT(DISTINCT cp.country_id) = 2;
    Ответ написан
    Комментировать
  • Как подсчитать бюджет Poe коммутатора?

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

    Просто считаешь общую мощность по классу, макс. паспортное потребление не выше середины бюджета для класса, избыток пойдёт на потери в линии. Если линия очень длинная или просто дерьмо, резервируй побольше.

    В наличии 6 телефонов по типу d link dph 120se. Максимальное потребление 4вт.

    Учитываем по классу 2, это 7 ватт на порт.

    Две точки доступа Unifi ap ac lite,макс.потреб 6вт.

    Эти по классу 3, т.е. 15.4 ватт на порт.

    Итого нужен бюджет 6*7+2*15,4=73 ватта.
    Ответ написан
    5 комментариев
  • Sequelize, как начать поиск элемента в таблице с конца?

    @Akina
    Сетевой и системный админ, SQL-программист.
    начать поиск элемента в таблице в БД с конца

    В таблице нет ни начала, ни конца. Таблица - это несортированная куча. Если нужен какой-то порядок записей - его следует указать явно выражением сортировки.

    как получить id последнего элемента в таблице?

    Последний (при какой-то сортировке) - это первый при обратной сортировке.
    Так что надо просто указать сортировку (обратную той, которую ты считаешь "прямой") и взять только первую запись.
    Ответ написан
    1 комментарий