MySQL根据自定义条件删除重复记录

标签 mysql duplicates conditional-statements

我有一个包含以下列的“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/

相关文章:

mysql - 选择至少包含搜索查询的行

mysql - 将 mysql workbench 连接到 GCE mysql

mysql - 从mysql表中删除两列的重复数据

duplicates - SAS : Eliminate duplicates if a condition is satisfied

javascript - 是否可以在 JavaScript 中有条件地赋值?

mysql - Entity Framework 和 MySQL - 不返回受影响的行数

javascript - 如何减少重复的javascript函数?

Java:使用if条件检查char变量的内容

javascript - 字符串返回语句JS

mysql - 如何选择第一个字符的唯一列表[MySQL]