MYSQL与引用表的多个连接

时间:2015-01-07 21:13:36

标签: mysql join

我已经不知疲倦地研究了尝试理解多个表的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表的模块并且不支持union,但即使你有一个使用union的解决方案,我也会接受它。

非常感谢您提供的任何帮助,我已经为此工作了太多时间。

1 个答案:

答案 0 :(得分: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表中的每个订单。 {1}}表。
然后我知道我还需要针对每个特定订单详细说明每种产品 我的数据库结构说我可以从products表到“连接”表p_o访问产品详细信息,然后我将p_o连接到我已加入的集合 {{{ 1}},customers} 基于orders列 现在在结果集中包含此信息( {order_numcustomersorders} )我只需要将p_o表连接到products键上的p_o表 最后,我列出了最终结果集所需的列,其中包含四个表 {product_codecustomersordersp_o} 。< / p>


我希望它可以帮助你。