Объединение таблиц для согласования всех возможных комбинаций

63
5

У меня две таблицы mysql. Один с номерами статей и один с номерами вариантов. Нет. Я хочу присоединиться к таблицам, чтобы иметь таблицу результатов со всеми возможными комбинациями статей/вариантов. Например:

Таблица номеров статей:

+-----------+-------------+
| ArticleNo | ArticleName |
+-----------+-------------+
| 0001 | Product 1 |
| 0002 | Product 2 |
| 0003 | Product 3 |
+-----------+-------------+

Таблица номеров вариантов:

+-----------+-------------+
| VariantNo | VariantName |
+-----------+-------------+
| 1001 | Variant 1 |
| 1002 | Variant 2 |
| 1003 | Variant 3 |
+-----------+-------------+

Таблица результатов:

+----------+---------------------+
| ResultNo | ResultName |
+----------+---------------------+
| 00011001 | Product 1 Variant 1 |
| 00011002 | Product 1 Variant 2 |
| 00011003 | Product 1 Variant 3 |
| 00021001 | Product 2 Variant 1 |
| 00021002 | Product 2 Variant 2 |
| 00021003 | Product 2 Variant 3 |
| 00031001 | Product 3 Variant 1 |
| 00031002 | Product 3 Variant 2 |
| 00031003 | Product 3 Variant 3 |
+----------+---------------------+

спросил(а) 2021-01-25T13:36:24+03:00 4 месяца, 4 недели назад
1
Решение
77

Вы ищете декартовский продукт. В SQL это обеспечивается через CROSS JOIN:

select concat(a.ArticleNo, v.VariantNo) as ResultNo,
concat_ws(' ', a.ArticleName, v.VariantName) as ResultName
from articles a cross join
variants v
order by a.ArticleName, v.VariantName;

ответил(а) 2021-01-25T13:36:24+03:00 4 месяца, 4 недели назад
77

Вы можете написать прямо:

SELECT  CONCAT(a.ArticleNo,v.VariantNo) as ResultNo, 
CONCAT(a.ArticleName,v.VariantName) as ResultName
FROM Article a,Variants v

Он будет производить Cross Join

ответил(а) 2021-01-25T13:36:24+03:00 4 месяца, 4 недели назад
-5

Я думаю, что это то, что вы ищете. Такая операция порождает декартово произведение. Чтобы решить вашу проблему, вы должны применить этот запрос по ссылке выше, и он должен выглядеть следующим образом:

select concat(ArticleNo,VariantNo ) as ResultNo ,
concat(ArticleName,VariantName) as ResultName
from Article
cross join Variants

ответил(а) 2021-01-25T13:36:24+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема