• Почему может не работать запрос с left join в postgresql?

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

    Ну вот теперь подумай - как на этот NULL среагирует where other_table."order_id"=10?

    .. on gs=other_table."date" AND other_table."order_id"=10;
    Ответ написан
    Комментировать
  • Как пофиксить ошибку Incorrect TIMESTAMP value?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если значение поля с типом TIMESTAMP некорректно (а пустая строка - это некорректное значение) - надо заменить его на корректное.
    • Если поле NULLable - то например на NULL.
    • Если настройки допускают нулевую дату - то на `0000-00-00 00:00:00`.
    • Иначе - на некое предопределённое значение. В зависимости от смысла поля - либо в далёком прошлом, либо в столь же далёком будущем.
    Ответ написан
    Комментировать
  • Как сохранить порядок номеров в запросе?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT * 
    FROM table 
    WHERE id IN (7, 8, 5, 4, 1)
    ORDER BY FIND_IN_SET(id, '7,8,5,4,1');
    Ответ написан
    Комментировать
  • SQLite Как выбрать записи, текстовое поле которых содержит подстроку, регистронезависимо?

    @Akina
    Сетевой и системный админ, SQL-программист.
    LIKE регистронезависим.
    GLOB регистрозависим.
    REGEXP - как напишешь регулярку, так и будет.
    Ответ написан
    Комментировать
  • Как хранятся индексы в postgresql и mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Прочитал, что в mysql в движке innodb индексы делятся на два больших типа - первичный и вторичный

    Понятия первичного и вторичного индексов никак не связаны с СУБД. И это не типы индексов по большому счёту. Просто первичный - однозначно идентифицирует запись (что определяется ограничениями на значение выражения и используемых в нём полей), тогда как вторичный - всего лишь может использоваться для однозначной идентификации, но лишь при условии, что он отвечает всем требованиям-ограничениям для первичного.

    В InnoDB - всего лишь есть дополнение, что при наличии первичного индекса он является также и кластерным. Для других движков и других СУБД такой зависимости может и не быть.

    кластеризованный, как написано хранится с данными

    Не-а. Кластерный индекс - это когда записи в теле таблицы (т.е. сами данные таблицы) хранятся в порядке сортировки по выражению этого кластерного индекса.

    Всегда ли не кластиризованные индексы хранятся в оперативной памяти или это как-то можно регулировать?

    Индексы всегда хранятся на диске. В оперативной памяти индексы могут всего лишь кэшироваться. Для ускорения доступа.

    Я слышал что индексы должны быть в пределах мегабайт, а не гигабайт.

    Или не о том слышал, или не так понял. Индексы никому и ничего не должны по части своего размера, который определяется суммарным размером данных индексного выражения, количеством записей и коэффициентом заполнения.

    Читал, что бывает так, что индекс в таблице индекса хранит сразу данные определенных столбцов, а не ссылки на эти строки в основной таблице.

    Вероятно, речь про INCLUDE-предложение в структуре индекса, имеющееся, например, в SQL Server... т.е. значения полей хранятся в выражении индекса как дополнительные данные, и не используются при сортировке.
    Ответ написан
    Комментировать
  • Как объединить запросы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Два LEFT JOIN, условие связывания - по id и определённому значению типа.
    Ответ написан
    Комментировать
  • Как составить запрос на выборку авторов в SQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT *
    FROM Author
    WHERE NOT EXISTS (
        SELECT NULL
        FROM Book
        WHERE Author.Authorld = Book.Authorld
          AND Book.PublishDateTime >= CURRENT_DATE - INTERVAL 2 YEAR
        )
    Ответ написан
  • Как правильно построить запрос в БД?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT table1.*, 
           EXISTS ( SELECT NULL
                    FROM table2
                    WHERE table2.table1_id = table1.id
                       AND table2.date = @needed_date
                    ) AS row_exists
    FROM table1

    Если точная дата внутри месяца неизвестна, то
    WHERE table2.date BETWEEN @needed_month_1st_day AND @needed_month_last_day
    Ответ написан
    Комментировать
  • Как подставить url на весь столбик?

    @Akina
    Сетевой и системный админ, SQL-программист.
    • Выделить диапазон с числами.
    • Alt-F11
    • Ctrl-G
    • ввести
      for each onecell in selection:onecell.value="https://d21skl.com/"&onecell.value:next

    • Enter
    • Alt-F4
    • Alt-F4

    Ответ написан
    Комментировать
  • Можно ли сделать такое отношение таблиц?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Связь типа M:N между продуктом и материалом должна трактоваться как самостоятельная сущность. И, как любая другая сущность, она может иметь свои собственные атрибуты.

    можно ли в промежуточную таблицу добавлять поле amount или это считается недопустимым?

    Количество в данном случае - атрибут именно связи, а не продукта и не материала. Посему поле количества в связывающей таблице не только допустимо, но и единственно правильно. При условии, что на комбинацию полей (product_id, material_id) наложено требование уникальности. Иначе должна существовать ещё одна таблица, которая ссылается на связующую таблицу и содержит поле количества.
    Ответ написан
    Комментировать
  • Как выбрать последнюю запись с group by?

    @Akina
    Сетевой и системный админ, SQL-программист.
    А решение было близко... раз нужны данные с разных уровней группировки, то либо вертеть подзапросы/CTE, либо использовать оконные функции. Как по мне, второе проще.
    SELECT DISTINCT
           product_id,
           size,
           SUM(orders) OVER (PARTITION BY product_id, warehouse_id, size) AS orders,
           FIRST_VALUE(stocks) OVER (PARTITION BY product_id, warehouse_id, size 
                                     ORDER BY `date` DESC) AS stocks,
           warehouse_id
    FROM stats
    WHERE DATE(`date`) >= '2023-09-01' 
      AND DATE(`date`) <= '2023-09-04';

    fiddle
    Ответ написан
  • Как построить дерево одним запросом c сортировкой по родителю?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как-то так:
    WITH RECURSIVE
    cte AS (
        SELECT *, LPAD(id, 10, '0') path
        FROM comments
        WHERE parent_id = 0
      UNION ALL
        SELECT comments.*, CONCAT(cte.path, LPAD(comments.id, 10, '0'))
        FROM comments
        JOIN cte ON cte.id = comments.parent_id
    )
    SELECT id, parent_id, content
    FROM cte
    ORDER BY path;

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

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

    Фраза интенсивно намекает, что эти сайты - полная копия основного. То есть и код, и, главное, структура БД, совпадают с точностью до запятой.

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

    Если это по какой-то причине невозможно - то обновление стоимости товаров оформляется в виде необходимых для выполнения операции наборов INSERT/UPDATE/DELETE запросов и выполняется на всех трёх серверах.

    Стоимость товаров часто меняется, и менять цены руками на всех сайтах, основном и региональных - трудозатратно.

    Если это можно, хотя и затратно, сделать руками - то с точки зрения СУБД это ни разу не "часто", а наоборот - чертовски редко.
    Ответ написан
  • Почему тип столбца xml не проверяет входное значение?

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

    Произвольный текст, не содержащий тегов, является валидным содержимым, но не XML документом. Не-XML фрагмент игнорируется при проверке.

    Попробуйте вставить нечто, являющееся документом/фрагментом XML, но с ошибкой в разметке - тут же схлопочете ошибку.
    DEMO
    Ответ написан
    Комментировать
  • Какими соседями будут граничные клетки на замкнутой поверхности?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В матрице Z(0..m, 0..n) элемент X(a,b) является соседом элемента Y(c,d), если выполняются условия
    ((a-b) MOD (m+1)) входит в {0, 1, m}
    ((c-d) MOD (n+1)) входит в {0, 1, n}

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

    PS. MOD - оператор получения остатка от целочисленного деления.
    Ответ написан
    Комментировать
  • Как работает кластер galera?

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

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

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

    Ставим сетевую корзину (программа третьей стороны, практически любая подойдёт, лишь бы запоминала, кто удалил). Удалённый файл, в отличие от обычной процедуры в Windows, не уходит в никуда, а помещается в сетевую корзину.

    Если туда попал именно окончательно удалённый файл (а не удалённый в связи с созданием новой версии) - восстанавливаем, а потом находим виновного и выписываем ему крепких и качественных звездюлей. Без последнего этапа схема практически не работает - как удаляли что не надо, так и будут удалять..
    Ответ написан
    2 комментария
  • Как составить запрос sql?

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

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

    Ну и, спрашивая про запрос, следует показывать не код на питоне, а именно текст запроса.
    Ответ написан
    Комментировать
  • Решает ли коммутатор с проблему максимальной скорости в роутере?

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

    Если устройства достижимы друг для друга напрямую (они в одной подсети) - будут общаться напрямую. Если нет - будут маршрутизироваться через роутер.
    Ответ написан
    1 комментарий