Как найти дубликаты в БД?

Делаю запрос к БД на поиск дубликатов. Соединил 3 таблицы и хочу удалить значения, которые совпадают по полям (t_s.l, t_s.t, t_s.w, t_m.a). Сделал выборку на поиск дубликатов:

SELECT
    count(t_s.l),
    count(t_s.t),
    count(t_s.w),
    count(t_m.a)
FROM
    tab_big as t_b
LEFT JOIN 
    tab_midl as t_m 
         on t_b.id = t_m.tb_id
LEFT JOIN 
    tab_small as t_s 
         on t_m.id = t_s.tm_id;

Вывод показал, что 6048 дубликатов.

Как мне посмотреть их и удалить после проверки?

Дополнение: введите сюда описание изображения

Дополнение 2 (Да, по таблицам видно будет, что таблица "tab_midl" отличается полем "b", но тем не менее, ее НАДО считать Дублем, т.к. элементы в таблице "tab_small" одинаковы):

Таблица tab_big:

id val1 val2
1 aaa bbb
2 bvb sdd

Таблица tab_midl:

id tb_id a b
1 1 50 25
2 1 50 75
3 1 50 75

Таблица tab_small:

id tm_id l t w val_n
1 1 10 20 30 xc
2 1 15 25 35 sd
3 2 10 20 30 xc
4 2 15 25 35 sd
5 2 15 5 3 d
6 2 15 7 7 s

Дополнение №3 (Отделил в запросах на создание дубли от недублей)

CREATE TABLE `tab_big` (
  `id` int(11) NOT NULL,
  `fl` float NOT NULL,
  `f2` float NOT NULL,
  `f3` float NOT NULL,
  `f4` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `tab_big` (`id`,  `fl`, `f2`, `f3`, `f4`) VALUES
(1, 0.0511719, 0.0878113, 0.894792, 0.430851),
(2, 0.0511719, 0.0878113, 0.894792, 0.430851),

(3, 0.06, 0.0878113, 0.894792, 0.430851),


CREATE TABLE `tab_midl` (
  `id` int(11) NOT NULL,
  `tb_id` int(11) DEFAULT NULL,
  `f1` int(11) NOT NULL,
  `f2` float NOT NULL,
  `f3` float NOT NULL,
  `f4` float NOT NULL,
  `f5` float NOT NULL,
  `a` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `tab_midl` (`id`, `tb_id`, `f1`, `f2`, `f3`, `f4`, `f5`, `a`) VALUES
(1, 1, 63, 0, 0, 1, 0.430851, 50),
(2, 1, 63, 0.176618, 0.262754, 0.308511, 1.1499, 50),
(3, 2, 63, 0, 0, 1, 0.430851, 50),
(4, 2, 63, 0.176618, 0.262754, 0.308511, 1.1499, 50),

(5, 3, 61, 0, 0, 2, 0.430851, 30),
(6, 3, 61, 0.176618, 0.262754, 0.308511, 1.1499, 70);



CREATE TABLE `tab_smal` (
  `id` int(11) NOT NULL,
  `tm_id` int(11) DEFAULT NULL,
  `l` float NOT NULL,
  `t` float NOT NULL,
  `w` float NOT NULL,
  `x` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


INSERT INTO `tab_smal` (`id`, `tm_id`, `l`, `t`, `w`, `x`) VALUES
(1, 1, 0.0973962, 0.705943, 0.0227891, 1),
(2, 1, 0.973962, 1.70594, 0.522, 0),
(3, 2, 0.0973962, 0.705943, 0.0227891, 1),
(4, 2, 0.973962, 1.70594, 0.522, 0)
(5, 3, 0.0973962, 0.705943, 0.0227891, 1),
(6, 3, 0.973962, 1.70594, 0.522, 0),
(7, 4, 0.0973962, 0.705943, 0.0227891, 1),
(8, 4, 0.973962, 1.70594, 0.522, 0)

(9, 5, 1.0973962, 3.705943, 5.0227891, 1),
(10, 6, 5.973962, 4.70594, 4.522, 0);

Дополнение 4:

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Akina

я хочу очистить БД от этих дублей, и оставить записи только минимальным значением поля "b" из таблицы "tab_midl"

DELETE t1
FROM tab_midl t1
JOIN tab_midl t2 USING (tb_id, a)
WHERE t1.b > t2.b
-- OR (t1.b = t2.b AND t1.id > t2.id)
;

перед тем как удалить дубли я хочу проверить - правильно ли ищутся дубли, если так, то я их удалю

Замени DELETE t1 на SELECT *.

→ Ссылка