2016-08-18 74 views
1

我有我需要连接两个MySQL表,第一种叫单另一种是所谓ORDERDETAILS。问题是这样的;每个订单可以有多个订单细节。我想加入他们以这样的方式,输出仅列productcode1,productcode2 ... productcode5和productname1 ... productname5分别为每个订单单行,与其相关的产品代码和产品名称的条目。我已经看到类似这样的问题的答案,它们使用GROUP_CONCAT将条目放入单个列中,但有没有办法将条目放入列中?由于创建单列从MYSQL连接具有1对多的关系

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

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

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

回答

0

使用union

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

使用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; 

对于排序目的,

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

SELECT t.order_details FROM(
    SELECT orderid AS order_details, 1 AS order_by 
    FROM orders 
    WHERE orderid = @o_id 
    UNION ALL 
    SELECT productcode, 2 AS order_by FROM ordersdetaild 
    WHERE orderid = @o_id 
    UNION ALL 
    SELECT productname, 3 AS order_by FROM ordersdetaild 
    WHERE orderid = @o_id 
)t 
ORDER BY t.order_by, t.order_details; 
0

你的输出意味着你不希望每个产品的单个行,但你做你的问题的状态。因此人们正在回答有关使用UNION的问题。我不认为这就是你的实际意思。

我想你实际上想要做的就是输出如下内容: OrderId,ProductCode1,ProductCode2,ProductName1,ProductName2。

如果这是正确的,你可以构建从几个疑问。 首先在OrderId上转换OrderDetails表,输出ProductCode。 然后,为ProductName执行相同的操作。

然后,你应该能够加入对那些两个转动表Order表以获得单个行的订单具有所有订单明细中,我理解你想要的方式。

+0

是的,你是正确的,遗憾的没有说清楚。任何有关构建解决方案的帮助? –

相关问题