MySql与find_in_set左联接不能正常工作?

时间:2018-06-28 04:47:29

标签: mysql join left-join

我使用左联接编写了查询,该联接将3个表联接起来以获取数据,它们是:

产品:

product_id  category_id  master_category_id  manufacturers_id  product_name  product_img  product_des  product_price  product_status
  17421      194           4,6,7,5               2504           prod_name    image-1.jpg   ----            ----              1

master_categories:

 master_category_id  master_category_name  original_image  picture  small  thumb  icon_img  master_category_status
    1               Dinnerware/Glassware   cat-image1.jpg     --      --      --     --             1

制造商:

manufacturers_id   manufacturers_name  original_image  picture  small  thumb  manufacturers_status
  1                    CalMil           Cal-Mil.png      --      --      --    1

我的查询是:

select (Case When p.product_status  = '0' Then 'Inactive' 
             When p.product_status  = '1' Then 'Active' 
             Else 'Deleted' End) AS status,
m.manufacturers_name,
GROUP_CONCAT(mc.master_category_name) as master_category_name,
TRIM(p.product_name) as product_name,
p.product_status,p.product_id 
from products p 
left join manufacturers m 
on p.manufacturers_id=m.manufacturers_id 
left join master_categories mc 
on find_in_set(mc.master_category_id,p.master_category_id) 
where p.product_name!=''
GROUP BY p.product_name order by TRIM(p.product_name) ASC LIMIT 0,15

每个产品都有多个master_categories,它们在“ products”表中的“ master_category_id”列中存储了多个master_category id,如上面的“ products”表所示。

我的问题是我的查询返回的是甚至没有任何“ master_category_id”的产品的master_category_name,即,即使没有分配任何master_category_id的产品也显示了master_category_name,并且该产品还具有只有2个master_categories显示超过2个类别

谁能帮助我,我的查询有什么问题。谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在product_id列上进行分组。如果多个产品使用相同的名称,则可能是将这些数据分组并给您不正确的结果。 find_in_set也应在> 0的条件下使用。 试试这个。

PVector m3 = null;
PVector m1 = new PVector();
PVector m2 = new PVector(2, 3);