按查询分组,以选择每组中字符串中找到的最大匹配的单个记录

时间:2016-02-05 08:24:58

标签: mysql select join

我有两张桌子。 table1:wp_pc_products

feed_product_name     id_merchant
    sony xperia c3        fkt
    nokia lumia           fkt
    samsung galaxy        fkt
    sony xperia c3        snd
    nokia lumia           snd
    samsung galaxy        snd

table2:wp_pc_products_merchants

slug     image
fkt      logo1.png
snd      logo2.png

这两个表之间的关系是,wp_pc_products中的id_merchant和wp_pc_products_merchants中的slug在第二个表中具有相同的记录但是不同。

我现有的查询是

select p.feed_product_name,p.id_merchant,m.image from wp_pc_products p JOIN wp_pc_products_merchants m ON m.slug=p.id_merchant where (feed_product_name like'sony%' or feed_product_name like'%xperia%' or feed_product_name like'%c3%') and (p.price BETWEEN "629.3" and "1168.7"

如果我在此查询结尾处使用group by子句(由id_merchant分组),则查询不会给出预期结果。

我也尝试了这个查询,它的工作正常但我想在上面的查询中使用相同的方式。

SELECT  wp_pc_products.*,wp_pc_products_merchants.image FROM wp_pc_products JOIN wp_pc_products_merchants ON wp_pc_products.id_merchant = wp_pc_products_merchants.slug  WHERE feed_product_name LIKE '%sony%' and feed_product_name LIKE '%xperia%' and feed_product_name LIKE '%c3%' group by id_merchant

我期待的结果是:

sony xperia c3    fkt     logo1.png
sony xperia c3    snd     logo2.png

1 个答案:

答案 0 :(得分:0)

以下是使用技术组明智最大值http://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.html

的方法
select 
wpp1.feed_product_name,
wpp1.id_merchant,
wpm.image
from wp_pc_products wpp1
join (
  select min(id_product) as id_product,id_merchant
  from wp_pc_products group by id_merchant
)wpp2 on wpp2.id_product = wpp1.id_product
join wp_pc_products_merchants wpm on wpm.slug = wpp1.id_merchant