#mysql
Вопрос:
У меня есть две таблицы отгрузки и транзакции, каждая из которых содержит составной ключ идентификатора заказа и идентификатора отгрузки или транзакции. Я пытаюсь создать объединенную таблицу, которая определенным образом содержит все данные. Мы высоко ценим вашу помощь и понимание.
Комментарии:
1. SQL работает не так. MySQL не имеет вложенных структур. Каждая строка должна существовать изолированно от любой другой строки. Исключение некоторых значений сделало бы эти строки непонятными сами по себе. Итак, возникает вопрос: почему вы думаете, что вам нужно это делать?
2. Ваши вложения неверны. Это приводит к той же картине
3. @MatBailie Я переношу эти данные в электронную таблицу, чтобы моя команда могла их просмотреть и просмотреть. Я боюсь, что наличие двух таблиц смутило бы их вместо одной, если бы все данные были в ней.
4. @4EACH Я считаю, что фотографии, которые я прикрепил, верны.
5. Если вы пытаетесь жестоко использовать SQL, чтобы компенсировать недостаток способностей в команде, решение состоит в том, чтобы обучить команду. Например, в желаемом результате указывается, что отгрузка 510 связана с транзакцией 407, а отгрузка 511 связана с транзакцией 408. Однако эти ассоциации не соответствуют действительности.
Ответ №1:
Самое близкое, что вы можете получить, и это все еще имеет смысл, — это использовать что-то вроде JSON_ARRAYAGG()
…
SELECT
s.order_id,
s.shipments,
t.transactions
FROM
(
SELECT order_id, JSON_ARRAYAGG(shipment_id) AS shipments
FROM shipments
GROUP BY order_id
)
s
INNER JOIN
(
SELECT order_id, JSON_ARRAYAGG(transaction_id) AS transactions
FROM transactions
GROUP BY order_id
)
t
ON t.order_id = s.order_id
идентификатор заказа | поставки | операции |
---|---|---|
1 | [501,502] | [401] |
2 | [503] | [402] |
3 | [504,505,506] | [403] |
4 | [507] | [404] |
5 | [508] | [405,406] |
Но затем индексирование, поиск и т. Д., Эти массивы становятся занозой в заднице.
Вообще говоря, то, что вы пытаетесь сделать, является анти-шаблоном.
Комментарии:
1. Я сначала переношу эти данные в узел, прежде чем отправлять их в нужную электронную таблицу. Как вы думаете, было бы лучше вместо этого манипулировать двумя таблицами в узле?
2. @maanDawod Я все еще утверждаю, что это ошибка. Я бы вообще не стремился к заявленной структуре. Согласно моим другим комментариям, в вашей структуре указаны ассоциации, которых просто не существует. Если вы хотите это сделать, это ваше дело. Но SQL не предназначен для этого, потому что как структура данных это просто не имеет смысла. Итак, если формат массива здесь не подходит, и вы настаиваете на искаженной структуре, для которой SQL не подходит, у вас есть несколько вариантов, кроме как сделать это на другом уровне вашего приложения.
3. Тот факт, что SQL не подходит для этого, должен сигнализировать о том, что ваша целевая структура не имеет смысла для представления этих данных. Язык, полностью посвященный представлению данных, не поддерживает ваши намерения, что это говорит о ваших намерениях?
4. Я понимаю ваше разочарование, и я полностью осознаю, что эта структура не имеет смысла с точки зрения программиста. Я новичок в SQL и не до конца понимаю, что и чего я не могу с ним сделать, спасибо за понимание.