2016-08-18 77 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

是的,你是正確的,遺憾的沒有說清楚。任何有關構建解決方案的幫助? –

相關問題