我已经不知疲倦地研究了尝试理解多个表的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的解决方案,我也会接受它。
非常感谢您提供的任何帮助,我已经为此工作了太多时间。
答案 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_num
,customers
,orders
} )我只需要将p_o
表连接到products
键上的p_o
表
最后,我列出了最终结果集所需的列,其中包含四个表 {product_code
,customers
,orders
,p_o
} 。< / p>
我希望它可以帮助你。