基于另一个表的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