Предположим, у вас есть эти таблицы:
+----------------------------+
| PRODUCTS |
+------+-------------+-------+
| code | name | price |
+------+-------------+-------+
| 1 | Bike Helmet | 99.99 |
| 2 | Shirt | 19.99 |
+------+-------------+-------+
+-------------------+
| CATEGORIES |
+------+------------+
| code | category |
+------+------------+
| 1 | Sports |
| 1 | Cycling |
| 1 | Protection |
| 2 | Men |
| 2 | Clothing |
+------+------------+
Вот запрос, основанный на another SO answer, что будет соответствовать вашему желаемому результату, если моя интерпретация его правильно:
SELECT p.code, p.name, p.prize,
(SELECT category FROM categories c WHERE c.code = p.code LIMIT 0, 1) as category1,
(SELECT category FROM categories c WHERE c.code = p.code LIMIT 1, 1) as category2,
(SELECT category FROM categories c WHERE c.code = p.code LIMIT 2, 1) as category3,
FROM products p
Это является результатом:
+------+-------------+-------+-----------+-----------+------------+
| code | name | price | category1 | category2 | category3 |
+------+-------------+-------+-----------+-----------+------------+
| 1 | Bike Helmet | 99.99 | sports | cycling | protection |
| 2 | Shirt | 19.99 | men | clothing | NULL |
+------+-------------+-------+-----------+-----------+------------+
Невозможно, однако, иметь динамическое число категорий в результате. В этом случае я ограничил число до 3, как в вашем вопросе. Там может быть решение с лучшей производительностью. Кроме того, это, очевидно, вложенный запрос и поэтому, вероятно, не подходит для ваших нужд. Тем не менее, это лучшее, что я мог придумать.
РЕГИСТРИРУЙТЕСЬ
Существует также раздел SQL JOIN, которые могли бы быть то, что вы ищете:
SELECT *
FROM products
NATURAL JOIN categories
Вы бы в конечном итоге с этим результатом:
+------+-------------+-------+------------+
| code | name | price | category |
+------+-------------+-------+------------+
| 1 | Bike Helmet | 99.99 | sports |
| 1 | Bike Helmet | 99.99 | cycling |
| 1 | Bike Helmet | 99.99 | protection |
| 2 | Shirt | 19.99 | men |
| 2 | Shirt | 19.99 | clothing |
+------+-------------+-------+------------+
Вы можете разместить некоторые образцы данных, а затем желаемый результат? – Taryn