Нулевые значения MySQL в Голанге - PullRequest
0 голосов
/ 23 мая 2019

Как вы решили проблему с LEFT JOIN и нулевыми значениями в MySQL и Go?

Например, у меня есть две таблицы order и order_item.Все столбцы имеют атрибут not null.Заказ может иметь 0 или более элементов order_items.Простой выбор, запрос левого соединения заказа без каких-либо элементов order_items завершается с ошибкой Row.Scan(), поскольку столбцы order_item возвращаются как нулевые значения:

SELECT * FROM `order`
LEFT JOIN `order_item` USING (order_id)
WHERE `order`.order_id = '123'

Я вижу три решения, ни одно из которых, на мой взгляд, не является действительно хорошим:

  1. Использовать COALESCE / IFNULL => Раздражает, потому что моя выбранная часть запроса генерируется автоматически.
  2. Использовать нулевые значения из mysql go lib => Это будет означать, чтокаждое значение в моей структуре order_item будет иметь эти типы.
  3. Разделить запрос на 2 => Проблема, если мне нужен список из 50 заказов с order_items, это будет 51 запрос.

Есть ли у вас другие решения?

1 Ответ

2 голосов
/ 23 мая 2019

Вы можете использовать опцию 2, но вместо сканирования в вашу структуру и необходимости изменять типы вашей структуры, вы можете сканировать во временные переменные с типами данных, допускающими значение NULL, и, основываясь на достоверности этих переменных, скопировать их значения в вашу структуру с помощью не обнуляемые типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...