2

我试图从两个表中获取结果,而没有第二个查询嵌套在第一个查询循环中。

我有一张桌子产品

product_code_1234 | product_name | otherfields...

还有一个表categories,其中一个产品可以有多个类别:

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
4

3 回答 3

2
select * from a,b 

将为您提供表 a 中的所有数据,并结合表 b 中的所有数据。

但是,如果您不想重复数据并且表 a 和 b 之间没有任何连接,那么如果没有一些联合或类似的东西就无法完成

于 2013-01-24T16:03:55.700 回答
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   |
+------+------------+

这是一个基于另一个 SO 答案的查询,如果我对它的解释是正确的,它将符合您想要的结果:

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   |
+------+-------------+-------+------------+
于 2013-01-24T17:13:29.893 回答
0

我想你将不得不做两个单独的查询。

一种检索产品,一种检索产品类别。

然后使用任何脚本语言(如 PHP)来实现您想要的结果(显示、导出等)。

于 2013-01-24T16:36:15.010 回答