我有這個疑問:的MySQL返回在單個列多行值
SELECT
s.id AS id,
s.item_id,
i.type_id AS type_id,
i.description AS description,
i.owner_id,
s.buyer_id,
i.receivedate,
i.statusdate,
i.baseprice,
i.salepercentage,
i.status_id,
s.posteddate,
s.closingdate,
s.discountdate,
s.discountrate,
t.description AS type_description,
st.description AS status_description
FROM
sale s
LEFT JOIN item i ON s.item_id=i.id
LEFT JOIN TYPE t ON i.type_id=t.id
LEFT JOIN STATUS st ON i.status_id=st.id
WHERE s.flag_id != 2
GROUP BY s.id
ORDER BY s.closingdate;
它工作正常,但作爲最後一步,我需要在級聯名字和姓氏字段拉從另一個表稱爲customer
對於均爲的i.owner_id
和s.buyer_id
字段。
我已經得到接近使用下列內容:
SELECT
s.id AS id,
s.item_id,
i.type_id AS type_id,
i.description AS description,
i.owner_id,
s.buyer_id,
i.receivedate,
i.statusdate,
i.baseprice,
i.salepercentage,
i.status_id,
s.posteddate,
s.closingdate,
s.discountdate,
s.discountrate,
t.description AS type_description,
st.description AS status_description,
GROUP_CONCAT(CONCAT(c.firstname, ' ', c.lastname) ORDER BY i.owner_id, s.buyer_id)
FROM
sale s
LEFT JOIN item i ON s.item_id=i.id
LEFT JOIN TYPE t ON i.type_id=t.id
LEFT JOIN STATUS st ON i.status_id=st.id
LEFT JOIN CUSTOMER c ON i.owner_id=c.id OR s.buyer_id=c.id
WHERE s.flag_id != 2
GROUP BY s.id
ORDER BY s.closingdate;
當我使用的條目在客戶表像它測試以下:
id=3, firstname="John", lastname="Doe"
id=10, firstname="Jane", lastname="Do"
以及出售表格中的項目有:
owner_id=3, buyer_id=10
owner_id=10, buyer_id=3
的GROUP_CONCAT()
列返回
Jane Do,John Doe
Jane Do,John Doe
我也沒辦法的知道哪個是所有者,哪個是純粹的買方關閉逗號分隔的位置,我希望的結果是
John Doe,Jane Do
Jane Do,John Doe
出售的物品。
是否可以確保返回將有一個控制順序返回GROUP_CONCAT()
列表中的結果集(即第一個客戶將與owner_id
和第二個顧客與buyer_id
相關的)?
+1,打我吧。 – Johan
這是'LEFT JOIN客戶AS買家ON ** s.buyer_id ** = buyer.id' –
@ypercube:謝謝,修復答案。 –