SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.10.2019 17:36:33

stparts
Участник
Зарегистрирован: 21.10.2019
Сообщений: 2

Помогите избавиться от дублей.

Нужно сделать выборку из нескольких таблиц. Составил запрос но получаю огромное количество дублей и таблицу размером более 250гб, хотя по идее, её размер не должен превышать 2гб.
DISTINCT и GROUP BY не помогают. При их использовании запрос виснет.

Сам запрос
SELECT product_id, nodeid category_id, '0' main_category
FROM article_links
JOIN passanger_car_pds ON passanger_car_pds.productid = article_links.productid
JOIN article_product_id ON article_product_id.supplierId = article_links.supplierId AND article_product_id.DataSupplierArticleNumber = article_links.DataSupplierArticleNumber

Результат (куча дублей)
____________________________________
| product_id | category_id | main_category |
-------------------------------------------
| 300008      |      100074 |                   0 |
--------------------------------------------
| 300008      |      100074 |                   0 |
--------------------------------------------
| 300008      |      100074 |                   0 |
--------------------------------------------
| 300008      |      100074 |                   0 |
--------------------------------------------

Помогите пожалуйста решить эту проблему.

Отредактированно stparts (21.10.2019 17:38:04)

Неактивен

 

#2 21.10.2019 19:09:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Помогите избавиться от дублей.

сделайте тестовый пример в виде:
-) создания таблиц
create table ..
-) наполнения тестовыми данными (достаточно по несколько строк, только чтобы проблема была видна)
insert into ..
-) какой результат должен быть на этих данных

Неактивен

 

#3 22.10.2019 09:59:24

stparts
Участник
Зарегистрирован: 21.10.2019
Сообщений: 2

Re: Помогите избавиться от дублей.

Для примера. Мы имеем несколько таблиц.
Таблица article_links
_______________________________________________
|supplierid    |  productid |    datasupplierarticlenumber |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-091            |
------------------------------------------------------
|     2    |     1     |      8EB 194 778-091           |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-171            |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-171            |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-031          |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-191          |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-051          |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-051           |
-----------------------------------------------------


Вторая таблица passanger_car_pds

---------------------------------------
|  nodeid    | productid     |supplierid       |
--------------------------------------
|     100042|     1         |    2           |
--------------------------------------
|     100042|     1         |    2           |
--------------------------------------
|     100048|     1         |    2           |
--------------------------------------
|     100048|     1         |    2           |
--------------------------------------
|     100048|     1         |    2           |
--------------------------------------
|     100062|     1         |    2           |
--------------------------------------
|     100062|     1         |    2           |
--------------------------------------
|     100072|     1         |    2           |
--------------------------------------

Третья таблица article_product_id
_______________________________________________
|product_id |    supplierId |    datasupplierarticlenumber |
------------------------------------------------------   
| 311057    |     2            |    8EB 194 778-091            |
------------------------------------------------------
| 311058    |    2            |    8EB 194 778-171            |
------------------------------------------------------
| 311059    |    2            |    8EB 194 778-031            |
------------------------------------------------------
| 311060    |    2            |    8EB 194 778-051            |
------------------------------------------------------
| 311061   |     2            |    8EB 194 778-191            |
------------------------------------------------------
| 311062   |    2            |    1A3 003 370-041            |
------------------------------------------------------
| 311063   |    2            |    1A3 003 370-067            |
------------------------------------------------------
| 311064  |    2            |    1A3 005 649-007            |
------------------------------------------------------


Знаем, что значения в таблице article_product_id уникальны.
article_links - линковачная таблица
passanger_car_pds - таблица, которая содержит id категории.
article_product_id.product_id  - уникальный id.
article_product_id.supplierId = article_links.supplierId
article_product_id.datasupplierarticlenumber = article_links.datasupplierarticlenumber

article_links.productid = passanger_car_pds.productid  - ссылка на категорию
passanger_car_pds.nodeid    - id категории.

Нужно создать новую таблицу, в которой будут записи вида id продукта и id категории, которой принадлежит данный продукт.

Т.е. вид должен быть таким.

____________________________________
| product_id | category_id | main_category |
-------------------------------------------
| 311057      |      100042 |                   0 |
--------------------------------------------
| 311057      |      100048|                   0 |
--------------------------------------------
| 311057      |      100062|                   0 |
--------------------------------------------
| 311057      |      100072 |                   0 |
--------------------------------------------
| 311058      |      100042 |                   0 |
--------------------------------------------
| 311058      |      100048|                   0 |
--------------------------------------------
| 311058      |      100062|                   0 |
--------------------------------------------
| 311058      |      100072 |                   0 |
--------------------------------------------
| 311059      |      100042 |                   0 |
--------------------------------------------
| 311059      |      100048|                   0 |
--------------------------------------------
| 311059      |      100062|                   0 |
--------------------------------------------
| 311059      |      100072 |                   0 |
--------------------------------------------

Т.е. один товар может принадлежать нескольким категориям, но не должен дублироваться как изначально.
Если нужно, могу сделать дамп по 100 записей с каждой таблицы.

Неактивен

 

#4 22.10.2019 19:10:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Помогите избавиться от дублей.

Так у вас в исходных данных есть дубли:
таблица article_links

|supplierid    |  productid |    datasupplierarticlenumber |
------------------------------------------------------
|     2    |     1         |    8EB 194 778-091            |
------------------------------------------------------
|     2    |     1     |      8EB 194 778-091           |

таблица passanger_car_pds

|  nodeid    | productid     |supplierid       |
--------------------------------------
|     100042|     1         |    2           |
--------------------------------------
|     100042|     1         |    2           |

Отсюда и дубли в результате. Если дубли в исходных данных норма, то только group by.
По поводу зависания нужно смотреть explain запроса и структуру таблиц в виде show create table..

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson