Задавайте вопросы, мы ответим
Вы не зашли.
Нужно сделать выборку из нескольких таблиц. Составил запрос но получаю огромное количество дублей и таблицу размером более 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)
Неактивен
сделайте тестовый пример в виде:
-) создания таблиц
create table ..
-) наполнения тестовыми данными (достаточно по несколько строк, только чтобы проблема была видна)
insert into ..
-) какой результат должен быть на этих данных
Неактивен
Для примера. Мы имеем несколько таблиц.
Таблица 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 записей с каждой таблицы.
Неактивен
Так у вас в исходных данных есть дубли:
таблица 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..
Неактивен