Nano Hash - криптовалюты, майнинг, программирование

Множественные соединения MYSQL со справочной таблицей

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

Вот мои таблицы:

customers | CREATE TABLE `customers` (
  `customer_num` int(11) NOT NULL AUTO_INCREMENT,
  `customer_name` varchar(50) DEFAULT NULL,
  `city` varchar(50) DEFAULT NULL,
  `state` varchar(50) DEFAULT NULL,
  `country` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`customer_num`)

orders | CREATE TABLE `orders` (
  `order_num` int(11) NOT NULL AUTO_INCREMENT,
  `order_date` date DEFAULT NULL,
  `shipped_date` date DEFAULT NULL,
  `status` varchar(15) DEFAULT NULL,
  `comments` text,
  `customer_num` int(11) DEFAULT NULL,
  PRIMARY KEY (`order_num`)

p_o   | CREATE TABLE `p_o` (
  `product_num` int(10) unsigned NOT NULL,
  `order_num` int(10) unsigned NOT NULL,
  KEY `order_num` (`order_num`)

 products | CREATE TABLE `products` (
  `product_num` int(11) NOT NULL AUTO_INCREMENT,
  `year` int(4) unsigned NOT NULL DEFAULT '2014',
  `make` varchar(20) NOT NULL,
  `model` varchar(20) NOT NULL,
  `price` int(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`product_num`)

Клиенты имеют отношения «один-многие» с заказами, в то время как заказы ссылаются на p_o, который имеет как product_num, так и order_num, а p_o также связан с продуктами.

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

select * from customers t1 join orders t2 on t1.customer_num=t2.customer_num;

Это соединение показывает всю информацию о заказах и клиентах, и я намереваюсь сделать это внутренним соединением. Я пробовал всевозможные способы заставить их всех объединиться в один, но ни один из них не работает, и я верю, что это на моей стороне. Также я использую модуль, который создает динамические таблицы mysql и не поддерживает объединение, но даже если у вас есть решение, использующее объединение, я его приму.

Любая помощь, которую вы можете предложить, очень ценится, я работаю над этим слишком много часов.

07.01.2015

Ответы:


1

Я думаю, вы должны получить необходимую информацию, используя следующее:

SELECT  
  `orders`.`order_num`,
  `orders`.`order_date`,
  `orders`.`shipped_date`,
  `orders`.`status`,
  `orders`.`comments`,
  `orders`.`customer_num`,
  `customers`.`customer_name`,
  `customers`.`city`,
  `customers`.`state`,
  `customers`.`country`,
  `products`.`product_num`,
  `products`.`year`,
  `products`.`make`,
  `products`.`model`,
  `products`.`price`
FROM
    `orders`
    inner join `customers`
        ON `customers`.`customer_num` = `orders`.`customer_num`
    inner join `p_o`
        ON `p_o`.`order_num` = `orders`.`order_num`
    inner join `products`
        ON `products`.`product_num` = `p_o`.`product_num`

Я хотел бы (и надеюсь) помочь вам понять процесс множественного соединения на основе этой проблемы.

Описание этой операции множественного соединения словами может быть таким:


Мне нужно извлечь подробную информацию о заказах, например: информацию заголовка заказа, подробную информацию о клиенте заказа и продукты, заказанные в каждом из номеров заказов.
Согласно моей структуре базы данных, я вижу, что каждый заголовок заказа из таблицы orders имеет поле с клиентом номер, которому принадлежит заказ, поэтому я хочу подключить подробные данные из таблицы customers к каждому заказу из таблицы orders.
Тогда я знаю, что мне также потребуется подробная спецификация каждого продукта для каждого конкретного заказа.
В моей структуре БД указано, что я могу получить доступ к подробной информации о продукте из таблицы products через таблицу «соединения» p_o, затем я подключаю p_o к моему уже присоединенному набору {customers, orders} на основе столбца order_num.< br> Имея эту информацию в результирующем наборе к настоящему времени ({customers, orders, p_o}), мне нужно только соединить таблицу products с таблицей p_o по ключу product_code.
В конце концов я список столбцов, необходимых для окончательного набора результатов, состоящего из четырех таблиц {customers, orders, p_o, _2 0_}.


Я надеюсь, что это может помочь вам как-то.

07.01.2015
  • Это здорово и отлично работает, во-первых, апострофы необязательны или необходимы? 08.01.2015
  • Я рад, что это помогло :) Что касается апострофов, они необязательны, но вы должны использовать их в столбце, таблице или другом объекте БД MySQL, только если его имя совпадает с ключевым словом MySQL или если имя содержит пробелы. Поэтому для столбца с именем my_column их использовать не нужно, но для столбцов year , my spaced column они необходимы. 08.01.2015
  • Пожалуйста, найдите мой обновленный ответ - я надеюсь, что он может немного помочь вам понять операцию множественного объединения. С уважением и желаю вам всего наилучшего в борьбе с БД :) 08.01.2015
  • это могло определенно объяснить некоторые из проблем, которые у меня были. И спасибо за это прекрасное объяснение. Я буду использовать это в будущем при выполнении подобных соединений! 08.01.2015
  • Тогда буду рад быть полезным :) 08.01.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..