2013-01-24 3 views
2

Я пытаюсь получить результат из двух таблиц, не имея второго запроса, вложенного в первый цикл запроса.mysql select query в двух таблицах

У меня есть таблица продукты:

product_code_1234 | product_name | otherfields... 

И таблица категории, где продукт может иметь несколько категорий:

category_name_1 | product_code_1234 
category_name_2 | product_code_1234 
category_name_3 | product_code_1234 

Есть ли запрос, чтобы получить следующий результат ?

product_code_1234 | product_name | ... | category_name_1 | category_name_2 | category_name_3 
+0

Вы можете разместить некоторые образцы данных, а затем желаемый результат? – Taryn

ответ

2
select * from a,b 

даст вам все данные из таблицы в сочетании со всеми данными из таблицы б.

Однако, если вы не хотите повторения данных и не существует никакой связи между таблицами А и это не может быть сделано без какого-либо союза или аналогичного

+0

Это не похоже на мои потребности, я получаю дубликаты записей продуктов, по одному для каждой категории. – Sclerato

+0

Как я писал «Однако, если вы не хотите повторения данных, и нет никакой связи между таблицами a и b, это невозможно сделать без какого-либо объединения или подобного» –

+0

О да, извините, думаю, мне нужны два вложенных запроса то таблицы могут сильно отличаться друг от друга, чтобы использовать объединение. Благодаря! – Sclerato

0

Я думаю, что вам придется сделать два отдельные запросы.

Один для извлечения продуктов, один для извлечения категорий товаров.

Затем используйте любой язык сценариев (например, PHP) для достижения желаемого результата (отображение, экспорт, что угодно).

2

Предположим, у вас есть эти таблицы:

+----------------------------+ 
| 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 | 
+------+-------------+-------+------------+