複数の結果があるサブクエリが単一のフィールドに組み合わされていますか?
-
27-09-2019 - |
質問
これらのテーブルがあると仮定し、そこから検索結果をブラウザに表示する必要があります。
Table: Containers
id | name
1 Big Box
2 Grocery Bag
3 Envelope
4 Zip Lock
Table: Sale
id | date | containerid
1 20100101 1
2 20100102 2
3 20091201 3
4 20091115 4
Table: Items
id | name | saleid
1 Barbie Doll 1
2 Coin 3
3 Pop-Top 4
4 Barbie Doll 2
5 Coin 4
このように見える出力が必要です:
itemid itemname saleids saledates containerids containertypes
1 Barbie Doll 1,2 20100101,20100102 1,2 Big Box, Grocery Bag
2 Coin 3,4 20091201,20091115 3,4 Envelope, Zip Lock
3 Pop-Top 4 20091115 4 Zip Lock
重要な部分は、各アイテムタイプが画面の返品で1つのレコード/行のみを取得することです。私は過去に同じアイテムの複数の行を返し、スクリプト言語を使用して出力を制限することでこれを達成しました。ただし、これにより、UIは非常に複雑でループがあります。ですから、表示する行があるのと同じくらい多くのレコードのみをデータベースに吐き出すことができることを望んでいます。
この例は、アイテムからコンテナに到達するために必要な2つの結合(販売テーブルを介して)に到達するために、少し極端な場合があります。
これを出力するクエリの例に嬉しいです。
itemid itemname saleids saledates
1 Barbie Doll 1,2 20100101,20100102
2 Coin 3,4 20091201,20091115
3 Pop-Top 4 20091115
私はサブクエリで単一の結果を返すことしかできないので、これを行う方法がわかりません。
解決
mysqlを使用していると仮定すると(4つの質問のうち、1つだけがmysqlとしてタグ付けされています)、 group_concat関数 あなたが望んでいることです:
SELECT i.name AS itemname,
GROUP_CONCAT(s.id ORDER BY s.id) AS salesids,
GROUP_CONCAT(s.date ORDER BY s.date) AS salesdates,
GROUP_CONCAT(s.containerid ORDER BY s.containerid) AS containerids,
GROUP_CONCAT(c.name ORDER BY c.name) AS containertypes
FROM ITEMS i
JOIN SALE s ON s.id = i.salesid
JOIN CONTAINERS c ON c.id = s.containerid
GROUP BY i.name
販売および/またはコンテナテーブルへのリンクがない可能性のあるアイテムが必要な場合は、「結合」の前に「左」を追加します。
所属していません StackOverflow