[英]mysql select query on two tables
我试图从两个表中获取结果,而没有在第一个查询循环中嵌套第二个查询。
我有一个餐桌产品 :
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
select * from a,b
将为您提供表a中的所有数据,以及表b中的所有数据。
但是,如果您不希望重复数据,并且表a和b之间没有任何连接,那么没有一些联合或类似操作就无法完成
假设您有这些表:
+----------------------------+
| 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 |
+------+-------------+-------+------------+
我猜您将不得不做两个单独的查询。
一种检索产品,一种检索产品类别。
然后使用任何脚本语言(如PHP)来实现所需的结果(显示,导出等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.