MySQL的36年5月5日 的Apache 2.2.15 的CentOS 6.6 PHP 31年5月4日是否可以將嵌套的select語句用作具有多行的列?
很抱歉的可怕標題,但這裏是我要找的幫助;我有2個表,每個訂單都有一個單獨的行,而order_items有多個行。
order
id | date | customer | status
order_items
id | order_id | item_id | item_name
我當前的代碼是通過開放的訂單循環然後做一個二次分貝呼叫搶項目,並把它們放入一個HTML表格的這樣一個單行:
order_id | date | customer | status | item_name
1 | 2014-11-20 | 100233 | open | widget a (item id 0004)
| widget a (item id 0004)
2 | 2014-11-21 | 103327 | open | widget c (item id 0005)
| widget d (item id 0006)
的預期的最終結果與上表所示完全相同,但如果可能,我希望在單個查詢中獲得整個事件,而不必在顯示的每個訂單中執行多個查詢。
現在,谷歌搜索了一段時間後,我一直無法找到任何真正與我正在嘗試做的事情。我查看了GROUP_CONCAT,但它只連接了一張表中的列。我想連接另一個表中的列,同時抓取找到的所有行。
我嘗試的SQL是這樣的:
select
o.id, o.date, o.customer, o.status, oi.id,
(select concat(item_name, ' (item id ', item_id, ')') from order_items where order_id = o.id) as 'item_list'
from order o inner join order_items i on o.id = i.order_id
where o.status = 'open'
order by date asc
即嵌套查詢語句是什麼,我想不通。那麼,這可能嗎?
當我運行我的版本的查詢,我得到:
Error Code: 1242
Subquery returns more than 1 row
感謝您回答問題的SQL部分。雖然我不認爲在SQL Web應用程序中修復訂單項的佈局是一件好事。 – mabi 2014-12-01 23:04:05
如上所述,group_concat僅將單行的列值連接爲新列。有多行我想添加到'item_list'列,所以我只是訂單信息加上一列中所有訂單項目的列表。 – tatorface 2014-12-02 00:22:42
這應該將所有項目按順序放在列中的單個分隔列表中。 – 2014-12-02 02:30:23