0

1つのテーブルのデータをCSVファイルにマップする大きなクエリを扱っているので、基本的には基本的なselectクエリのように見えます--

SELECT * FROM item_table

-ただし、*実際には100行のCASE、IF、IFNULL、およびその他のロジックです。

selectステートメントに「類似アイテム」行を追加するように言われました。これはコンマ区切りのアイテム番号の文字列である必要があります。類似のアイテムはcategory_tableにあり、2つのデータポイントcolumn_aとcolumn_bでitem_tableに結合でき、category_table.category_idには類似のアイテムを識別するデータがあります。

さらに、サブクエリを使用しないように言われました。

したがって、同じcategory_id値を持つそのテーブルのcategory_tableとgroup_concatのアイテム番号を結合する必要があります(ただし、現在のレコードのアイテム番号はありません)。

指示に関係なくサブクエリでしか実行できない場合は、それを受け入れますが、可能であれば、指示に従って結合とgroup_concatを使用して実行したいのですが、理解できません。これどうやってするの?

4

3 に答える 3

1

これはあなたが探しているものだと思いますが、item_tableを一意に識別するものがわからなかったため、column_aとcolumn_bを使用しました(これらは正しくない可能性があります)。

SELECT 
    ...,
    GROUP_CONCAT(c.category_id separator ',') CategoryIDs
FROM item_table i
   JOIN category_table ct ON i.column_a = ct.column_a AND
      i.column_b = ct.column_b
GROUP BY i.column_a, i.column_b

私は通常のを使用しましたINNER JOINが、category_tableに関連するレコードがない場合は、LEFT JOIN代わりに代わりに使用して目的の結果を取得する必要があります。

于 2013-02-23T22:12:22.293 に答える
1

非表示列と呼ばれるmySQLの「機能」を利用できます。

各行を一意に識別するアイテムIDがアイテムテーブルにあると仮定します。そして、私があなたの論理を正しければ、次のクエリはあなたが望むことをします:

select i.*, group_concat(c.category_id)
from item_table i left outer join
     category_table c
     on i.column_a = c.column_a and
        i.column_b = c.column_b and
        i.item_id <> c.category_id
group by i.item_id
于 2013-02-23T22:12:51.337 に答える
1

多分このようなもの?

SELECT i.*, GROUP_CONCAT(c.category_id) AS similar_items
  FROM item_table i
INNER JOIN category_table c ON (i.column_a = c.column_a AND
                                i.column_b = c.column_b)
GROUP BY i.column_a, i.column_b
于 2013-02-23T22:24:29.000 に答える