基于另一个表的Mysql筛选结果

基于另一个表的Mysql筛选结果,mysql,Mysql,我有一些表,希望从结果中删除另一个表中存在的表 这是第一个调用,您可以看到我正在处理的表的外观: SELECT a.id_product, b.id_product_attribute FROM ps_product_lang a LEFT JOIN ps_product_attribute b ON (a.id_product = b.id_product) 表: id_product | id_product_attribute 25

我有一些表,希望从结果中删除另一个表中存在的表

这是第一个调用,您可以看到我正在处理的表的外观:

    SELECT a.id_product, b.id_product_attribute 
    FROM ps_product_lang a 
    LEFT JOIN ps_product_attribute b 
    ON (a.id_product = b.id_product)
表:

id_product | id_product_attribute
   25              null
   26              null
   27              192
   27              193
   27              194
   27              195
在我的另一张表中,我有:

SELECT * FROM eds_combinable_products

id_product  |  id_product_attribute
   25                 null
   27                 194
我试图通过打这个电话来过滤我的结果,但是对于没有产品属性的产品,我运气不佳。它将删除那些属性刚刚好的

SELECT a.id_product, b.id_product_attribute 
FROM ps_product_lang a 
LEFT JOIN ps_product_attribute b 
ON (a.id_product = b.id_product)
WHERE NOT EXISTS(
      SELECT c.id_product, c.id_product_attribute 
      FROM eds_combinable_products as c
      WHERE a.id_product = c.id_product
                    AND
            b.id_product_attribute = c.id_product_attribute
      )

我通过向notexists调用添加IF语句来解决这个问题

SELECT a.id_product, b.id_product_attribute FROM ps_product_lang a 
LEFT JOIN ps_product_attribute b ON (a.id_product = b.id_product)
WHERE NOT EXISTS(SELECT c.id_product, c.id_product_attribute FROM eds_combinable_products as c WHERE      a.id_product = c.id_product AND IF(b.id_product_attribute,b.id_product_attribute,0) = c.id_product_attribute)

或者更简单地说:

SELECT  a.id_product, 
        b.id_product_attribute 
FROM    ps_product_lang a LEFT JOIN ps_product_attribute b ON (a.id_product = b.id_product)
        LEFT JOIN eds_combinable_products as c on a.id_product = c.id_product
WHERE   c.id_product_attribute is not null