从另一张表中加入结果

时间:2013-02-23 22:07:23

标签: mysql

我正在处理将一个表中的数据映射到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来做 - 我只是想不出来。我怎么能这样做?

3 个答案:

答案 0 :(得分: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来获得所需的结果。

答案 1 :(得分: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

答案 2 :(得分: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