• Как исправить ошибку связанную с FULL JOIN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    MySQL в принципе не знает о существовании FULL JOIN. И это как раз тот редчайший случай, когда сообщение об ошибке не соответствует проблеме.

    Проблема решается эмуляцией. Есть как минимум два варианта:

    SELECT * FROM table1 LEFT JOIN table2 USING (column)
    UNOIN ALL
    SELECT * FROM table1 RIGHT JOIN table2 USING (column) WHERE table1.column IS NULL

    SELECT *
    FROM (
        SELECT DISTINCT column FROM table1
        UNION ALL
        SELECT DISTINCT column FROM table2
        ) AS table0
    LEFT JOIN table1 USING (column)
    LEFT JOIN table2 USING (column)

    Во втором варианте кажется, что DICTINCT не нужны - но с ними работать будет заметно быстрее, особенно если поле индексировано.
    Ответ написан
    2 комментария
  • Как из word перенести таблицу в Excel с сохранением стилей и форматом?

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

    Нет, нельзя. Ширина колонки и высота строки - это именно атрибут колонки/строки. А не прямоугольного диапазона ячеек, в который выполнится вставка. Так что двигать - придётся.

    Всё остальное (шрифты, цвета, заливка, выравнивание и пр.) должно копироваться нормально. При условии, что задано явно, а не используется дефолтная настройка. И при условии, что диапазон назначения заранее настроен на тип данных текстовый. Иначе преобразований некоторых значений в даты, выравнивание чисел по правому краю и прочих прелестей не избежать...

    PS. Можно эту таблицу вставлять не как значения ячеек, а как объект Документ MS Word. Вот тогда точно ничего не уплывёт.
    Ответ написан
    4 комментария
  • Как правильно хранить изображения в SQL и как правильно работать с ними в WPF проекте?

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

    Наилучшее решение - файлы хранятся в FileTables либо FILESTREAM, а в таблице лежат ссылки на них. Что приятно - при этом не надо распыляться с безопасностью, за ней следит SQL Server.

    Сравнение параметров для хранения больших двоичных...

    Можно, конечно, хранить файлы и в файловой системе. Но тогда вышеупомянутая безопасность разваливается на две независимые и несвязанные части... и обе требуют внимания и поддержки.

    PS. Пройдя по ссылке - обязательно прочитать и оригинальный ихнеязычный текст. Как, впрочем, и для любого другого машиннопереведённого текста.
    Ответ написан
  • В чём разница прописывании VLAN на порт коммутатора Awaya?

    @Akina
    Сетевой и системный админ, SQL-программист.
    vlan members 831 21

    Данная команда включает порт 21 в VLAN 831 в режиме tagged. Порт функционирует как trunk либо hybrid.

    vlan ports 21 pvid 831

    Данная команда включает порт 21 в VLAN 831 в режиме untagged. Порт функционирует как access либо hybrid.
    Ответ написан
    Комментировать
  • MySQL автоматически увеличивает размер ячейки?

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

    В MySQL нет "ячеек" - это не Excel. Есть записи, есть поля, есть поле отдельной записи.

    Если в ячейку типа TEXT не влазят данные, MySQL автоматически увеличит её до необходимого размера или выдаст исключение?

    Если размер данных превышает размер для типа данных поля - будет выдана ошибка или предупреждение "data too long". Что именно будет выдано - зависит от того, какой запрос, и от текущих настроек сессии.

    Как сделать "резиновую" ячейку в таблице?

    Никак. Но если нужно помещать в таблицу данные, которые не лезут в LONGTEXT (а это ни много ни мало 4 гигабайта!) - то Вы явно выбрали инструмент не по задаче. Храните такое в файловой системе.
    Ответ написан
  • Почему не даёт зайти в общую папку?

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

    Мой компьютер - ПКМ - Управление - Общие папки - Общие ресурсы - нужный ресурс - ПКМ - Свойства - Разрешения для общего ресурса

    Заодно проверьте в локальных политиках, разрешен ли доступ из сети с пустым паролем (у юзеров пароли же не установлены, верно?). И не запрещён ли кому вообще доступ из сети.
    Ответ написан
  • Как формировать сырые SQL запросы максимально эффективно?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Обычно если в запрос может быть передано значение, а может и нет, делают так:
    ... AND (column = {parameter} OR {parameter} IS NULL) ..

    При подстановке параметра сервер уже на этапе построения плана выполнения запроса, зная значение {parameter}, получит либо
    ... AND (column = {parameter} OR FALSE) .. ==> ... AND (column = {parameter}) ..
    либо
    ... AND (column = {parameter} OR TRUE) .. ==> ... AND (TRUE) ...

    PS. Чтобы не геморроиться с определением, когда ставить WHERE, начальный шаблон делают такой:
    SQL = "SELECT * FROM USERS WHERE 1=1 {} LIMIT %s OFFSET %s"

    и все дополнительные условия формируют в виде
    AND {условие}
    Тогда не надо оглядываться, первое это условие или нет.

    Само же условие 1=1 будет обращено в TRUE и отброшено опять-таки на этапе построения плана.
    Ответ написан
    2 комментария
  • MySQL PDO, Почему все значения при выборке типа string?

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

    То есть какие-то дополнительные преобразования, изменяющие тип данных, выполняет PHP уже после того, как он получил ответ от MySQL. Или не PHP, а коннектор, который PHP использует для доступа к MySQL. Но в любом случае это происходит уже на стороне клиента.

    Предположу, что эмуляция - процесс двусторонний. То есть не только на пути "туда", но и на обратном пути. Что при дополнительной обработке, которую требует настройка PDO::ATTR_EMULATE_PREPARES => true, корёжит тип данных.

    На всякий случай проверьте, не вызывает ли изменение этого флага корректировки других флагов. В частности, PDO::ATTR_STRINGIFY_FETCHES.
    Ответ написан
  • Как отключить автоматическую перезагрузку Windows 10 для установки обновлений?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Планировщик заданий - Библиотека планировщика заданий - Microsoft - Windows - UpdateOrchestrator - Reboot - ПКМ - Отключить
    Ответ написан
    Комментировать
  • Как составить ассоциацию squelize один к одному?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как составить ассоциацию squelize один к одному?

    В MySQL связи "один к одному" не существует в принципе. Точнее, такая связь нереализуема на изменяемом наборе данных. Неважно, напрямую или через какой-либо ORM, включая и Sequelize.

    Возможна только реализация связи "один к (ноль либо один)".
    Ответ написан
    Комментировать
  • Как обезопасить id SERIAL для корректной работы без промежутков значений?

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

    Никто не должен видеть значений автоинкрементного синтетического ключа, кроме самого сервера.

    AI PK существует только и исключительно для правильной работы встроенной подсистемы СУБД, осуществляющей контроль целостности и непротиворечивости данных. Попытка возложить на такое поле ещё какую-то функцию, тем более функцию, в результате выполнения которой значения этого поля станут видны пользователю (ещё хуже - если эти значения станет необходимо видеть пользователю), немедленно порождает проблемы.
    Причём порождаемые проблемы никак не связаны с основной функцией поля - вот какое пользователя собачье дело, последовательны значения или с разрывами? разрывы влияют на уникальность? нет... или они нарушают нормальную работу ссылочной целостности? нет... или они...? нет... А вся претензия в одном - типа "некрасиво". Аргумент для дураков - потому как значение в таблице БД, а некрасивость в выводе на экран, осуществляемом клиентским приложением. Но если даже отсутствие логики не препятствие, так вон тут рядом советовали - заводишь отдельное поле, в него "свой какой-то счётчик" программный, и поддерживай свою непрерывность хоть до посинения! тем более что сейчас найти (актуальную версию любой) СУБД, не поддерживающую CTE, ROW_NUMBER(), тем более ORDER BY - без шансов.
    Ответ написан
    4 комментария
  • Как в sqlalchemy 2.0 добавить запись в таблицу с учётом других таблиц?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну, скажем, так:
    INSERT INTO Заказ (ПоставщикID, КлиентID, АдминистраторID, {остальные поля})
    VALUES (
        (SELECT ПоставщикID FROM Поставщик WHERE Имя = 'Василий Пупкин'),
        (SELECT КлиентID FROM ...),
        (SELECT АдминистраторID FROM ...),
        {остальные значения}
    )

    А на свой фреймворк отображайте самостоятельно...
    Ответ написан
    Комментировать
  • Server 2019 на стационарный пк. возможно ли это?

    @Akina
    Сетевой и системный админ, SQL-программист.
    возможно ли это?

    Да. Но строго x64 - под x86 на эту матерь дров нет и не предвидится.
    Хотя я бы рекомендовал натянуть какой-нить VMM (ESX, Hyper-V и т.п.), а в нём уже виртуалку с сервером.

    как драйвера ставить?

    Как обычно. Либо накачав с вендора (брать дрова для W10), либо через MS UPDATE catalog по ven&dev.
    Ответ написан
    9 комментариев
  • На основании чего PostgreSQL сортирует данные в JSONField?

    @Akina
    Сетевой и системный админ, SQL-программист.
    С точки зрения Постгресса JSON - это текст. И никакой сортировки там не наблюдается. Что положил, то и обратно получил. Что, кстати, позволяет хранить в поле данного типа не соответствующие стандарту значения с дубликатами имён свойств (см. fiddle, последнюю запись).
    Вот JSONB - это уже бинарная строка во внутреннем формализованном формате. И такое кодирование предусматривает в том числе сортировку по ключам в лексикографическом порядке как бинарной строки (binary collation).
    fiddle
    Ответ написан
    Комментировать
  • Как составить sql запрос?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH
    cte AS (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY document_id ORDER BY job_id DESC) rn
      FROM my_table
      )
    SELECT document_id, job_id, person_id
    FROM cte 
    WHERE rn = 1;

    И в качестве бонуса
    SELECT DISTINCT 
           document_id,
           MAX(job_id) OVER (PARTITION BY document_id) job_id,
           FIRST_VALUE(person_id) OVER (PARTITION BY document_id ORDER BY job_id DESC) person_id
    FROM my_table
    Ответ написан
    Комментировать
  • Как соединить интернет класс с сервером?

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

    Иными словами, в качестве маршрутизатора в инет и одновременно DHCP-сервера выступает этот самый "сервер школы".
    Соответственно решение - на сервере в настройках DHCP-сервера создать ещё один скоп /27 или шире, и смаршрутизировать его в интерфейс/VLAN, через который подключается коммутатор класса.
    Задача должна решаться администратором, а не первым попавшимся под руку неспециалистом.
    Ответ написан
    2 комментария
  • Как сделать дополнительную выборку записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH 
    cte AS (
        SELECT * , 
               ROW_NUMBER() OVER (ORDER BY `date` DESC, id DESC) rn, 
               DENSE_RANK() OVER (ORDER BY `date` DESC, id DESC) dr
        FROM `list` 
        WHERE user='1' 
        )
    SELECT *
    FROM cte
    WHERE dr <= (
        SELECT dr
        FROM cte
        WHERE rn = 25
        )

    Версия сервера: 5.6.51 - MySQL Community Server (GPL)

    SELECT *
    FROM `list`
    WHERE user='1' 
      AND `date` >= (
        SELECT `date`
        FROM 'list'
        WHERE user='1' 
        ORDER BY `date` DESC, id DESC LIMIT 24, 1
    )
    Ответ написан
    4 комментария
  • JSON_REMOVE меняет порядок ключей?

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

    Бред сивой кобылы. Согласно стандарту, свойства в объекте не имеют такой характеристики как относительный порядок. Они являются ключами коллекции - поэтому, кстати, ещё и не могут дублироваться.

    Кстати, сразу понятно, что поле имеет текстовый тип данных, а не JSON. Иначе бы эффект изменения порядка ключей в текстовом представлении JSON давно бы вылез.

    Если такой порядок важен - следует использовать массив, а не объект.
    Ответ написан
  • Таблица маршрутизации?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. В сети может быть несколько маршрутизаторов, и разные конечные узлы могут быть доступны через разные маршрутизаторы. Таблица позволяет знать, через кого слать трафик.
    2. На компьютере может быть несколько внешних сетевых интерфейсов (а ещё есть localhost), и разные конечные узлы могут быть доступны через разные интерфейсы. Таблица позволяет знать, через кого слать трафик.
    Ответ написан
    Комментировать
  • Почему может не работать запрос с 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;
    Ответ написан
    Комментировать