複数の結果があるサブクエリが単一のフィールドに組み合わされていますか?

StackOverflow https://stackoverflow.com/questions/3056081

質問

これらのテーブルがあると仮定し、そこから検索結果をブラウザに表示する必要があります。

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

販売および/またはコンテナテーブルへのリンクがない可能性のあるアイテムが必要な場合は、「結合」の前に「左」を追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top