2013-02-23 110 views
0

我处理大量的查询,从地图数据的一个表到一个CSV文件,因此它本质上看起来像一个基本的选择query--加入结果从另一个表

SELECT * FROM item_table 

--except是*实际上是一百行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来做 - 我只是想不出来。我怎样才能做到这一点?

回答

1

您可以使用称为隐藏列的mySQL“功能”。

我会假设你有唯一标识每一行的项目表中的项目编号。如果我有你的逻辑正确的话,下面的查询就是你想要的:

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 
+0

谢谢。我太过复杂了。 – 2013-02-23 23:00:52

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

也许是这样的?

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 
相关问题