如果子查询返回null值,如何删除行?

时间:2014-02-28 12:05:59

标签: mysql

我有以下查询。

select
        Product.*, 
        (
        select
                group_concat(features.feature_image order by product_features.feature_order) 
            from product_features
            inner join features
                on features.id = product_features.feature_id 
            where
                product_features.product_id = Product.id
                and product_features.feature_id in(1)
        ) feature_image 
    from products as Product 
    where
        Product.main_product_id=1
        and Product.product_category_id='1'

如果feature_image为空,我想绕过该行。

1 个答案:

答案 0 :(得分:1)

您的查询看起来有点奇怪,因为您正在子查询中完成大部分工作:

select p.*, (select group_concat(f.feature_image order by pf.feature_order)
             from product_features pf inner join
                  features f
                  on f.id = pf.feature_id
                  where pf.product_id = p.id and pf.feature_id in (1)
            ) as feature_image
from products p
where p.main_product_id=1 and p.product_category_id='1';

一种更常见的短语查询方式是外部查询中的inner join

select p.*, group_concat(f.feature_image order by pf.feature_order) as feature_image
from products p join
     product_features pf
     on pf.product_id = p.id and pf.feature_id in (1) join
     features f
     on f.id = pf.feature_id
where p.main_product_id=1 and p.product_category_id='1'
group by p.id;

这将自动仅包含具有匹配功能的产品。您可以使用left outer join获取所有产品。