0

我正在处理一个将数据从一个表映射到 CSV 文件的大型查询,因此它基本上看起来像一个基本的选择查询——

SELECT * FROM item_table

--除了那*实际上是一百行 CASE、IF、IFNULL 和其他逻辑。

我被告知要在 select 语句中添加一个“相似项目”行,它应该是一串以逗号分隔的项目编号。在 category_table 中可以找到相似的项目,该表可以在两个数据点 column_a 和 column_b 上连接到 item_table,其中 category_table.category_id 具有标识相似项目的数据。

此外,我被告知不要使用子查询。

所以我需要从该表中加入具有相同 category_id 值的 category_table 和 group_concat 项目编号(但没有当前记录的项目编号)。

如果我只能使用子查询而不考虑说明,我会接受,但如果可能的话,我想按照说明使用 join 和 group_concat 来做——我就是想不通。我怎样才能做到这一点?

4

3 回答 3

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 回答
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 可能没有任何相关记录,您可能需要使用 aLEFT 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 回答