我有一个包含以下列的“fb_products”表:
CREATE TABLE IF NOT EXISTS `fb_products` (
`id` int(11) NOT NULL,
`code` varchar(255) DEFAULT NULL,
`price` decimal(10,2) NOT NULL DEFAULT '0.00',
`in_promo` tinyint(1) NOT NULL DEFAULT '0',
`original_product_id` int(11) DEFAULT '0',
.........................................
) ENGINE=InnoDB AUTO_INCREMENT=6254 DEFAULT CHARSET=utf8;
我的站点中有一个基于多个条件的 SELECT 搜索过滤器。
如果两个产品具有相同的“original_product_id”并且其中一个具有“in_promo”= 1,而另一个 - “in_promo”= 3,我只需要选择具有“in_promo”= 3 的记录。这是否可以实现使用 MySQL 查询?这是一个示例 SQL,由我站点中的搜索过滤器生成:
SELECT
p.id,
.............
(
SELECT SUM(quantity) FROM `gensoft_availability` WHERE code = p.code
) AS avail,
(SELECT id FROM `fb_products_products_cats_links` WHERE prod_id =p.id AND cat_id='17' AND p.visible=1 LIMIT 1) as rent_product
FROM
fb_products AS p
INNER JOIN fb_products_products_cats_links AS c ON c.prod_id = p.id AND c.cat_id IN (19,21,26,23,22,24,20,18)
LEFT JOIN fb_products_images_bg AS i ON i.item_id = p.id AND i.default_item = '1'
WHERE p.language = 'bg' AND p.archive = 0 ...
最佳答案
我会使用 NOT EXISTS:
SELECT * FROM fb_products
WHERE
in_promo=3
OR
NOT EXISTS (
SELECT * FROM fb_products f
WHERE
f.original_product_id=fb_products.original_product_id
AND f.in_promo=3
)
然后你可以添加多个条件,或者将这个查询作为子查询并加入 与其他表的结果。
请看 fiddle here .
关于MySQL根据自定义条件删除重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32562767/