从具有1对多关系的MYSQL联接创建单行

时间:2016-08-18 05:57:35

标签: mysql

我有两个我需要加入的MYSQL表,第一个叫做命令,另一个叫做orderdetails。问题是这样的;每个订单可以有多个订单详细信息。我希望以这样的方式加入它们:输出只为每个订单生成一行,其相关的productcode和productname条目分别在productcode1,productcode2 ... productcode5和productname1 ... productname5中。我已经看到类似问题的答案,使用GROUP_CONCAT将条目放入单个列但有没有办法将条目放入列中?感谢

orders
+-------------+
|orderid      |
|firstname    |
|secondname   |
|paymentamount|
+-------------+

ordersdetails
+----------------+
| ordersdetailid |
| orderid        |
| productcode    |
| productname    |
+----------------+

Output
+----------------+
| orderid         |
| productcode1    |
| productcode2    |
| productcode3    |
| productcode4    |
| productcode5    |
| productname1    |
| productname2    |
| productname3    |
| productname4    |
| productname5    |
+----------------+

3 个答案:

答案 0 :(得分:0)

使用union

select orderid from orders where orderid=?
Union 
select orderid from ordersdetails t1 join orders t2 on t1.orderid=t2.orderid where orderid=?

答案 1 :(得分:0)

使用#include<stdio.h> #include<conio.h> void main() { int names[] = {23,23,34}; int *nam[] = { names, names+1 , names +2}; char *temp; clrscr(); printf("%u" , (nam)); getch(); }

<强>查询

UNION ALL

出于分类目的,

SET @o_id := 2; -- your order id here

SELECT orderid AS order_details
FROM orders
WHERE orderid = @o_id
UNION ALL
SELECT productcode FROM ordersdetaild
WHERE orderid = @o_id
UNION ALL
SELECT productname FROM ordersdetaild
WHERE orderid = @o_id;

答案 2 :(得分:0)

您的输出意味着您不希望每个产品只有一行,但您的问题表明您这样做。因此人们正在回答使用UNION。我不认为这是你的意思。

我认为你真正想做的是输出如下内容: OrderId,ProductCode1,ProductCode2,ProductName1,ProductName2。

如果这是正确的,您可以从几个查询中构造它。 首先在OrderId上转动OrderDetails表,输出ProductCode。 然后,对ProductName执行相同的操作。

然后,您应该能够针对这两个透视表加入Order表,以获得具有所有订单明细的订单的单行,其方式与我所解释的一样。