【发布时间】:2014-03-04 19:41:30
【问题描述】:
我有两个表,类别和产品。我正在尝试执行一个 select 语句,该语句将从产品中取出所有产品并使用类别表中的 order 列对其进行订购。
Categories
+--------+-------+-------+
| cat_id | name | order |
+--------+-------+-------+
| 1 | Cat 1 | 1 |
| 2 | Cat 2 | 3 |
| 3 | Cat 2 | 2 |
+--------+-------+-------+
Products
+---------+--------+-------+--------+
| prod_id | name | price | cat_id |
+---------+--------+-------+--------+
| 1 | Prod 1 | 1.99 | 1 |
| 2 | Prod 2 | 2.99 | 2 |
| 3 | Prod 3 | 3.99 | 3 |
| 4 | Prod 4 | 4.99 | 0 |
| 5 | Prod 5 | 4.99 | 2 |
+---------+--------+-------+--------+
我设法构建了这个 SQL 语句来完成它。
SELECT p.* FROM products AS p
JOIN categories AS c
ON c.cat_id = i.cat_id
ORDER BY c.order ASC
问题是产品不必属于某个类别,如果不是,此查询将不会检索它们。虽然我可以在没有连接的情况下执行第二个查询并附加到第一个查询,但当我开始为产品设置分页时肯定会出现问题,因为我认为计算要显示的产品会变得太复杂。有什么我可以做的吗?
【问题讨论】:
-
使用
LEFT OUTER JOIN而不是JOIN -
当调用一个简单的
JOIN时,您是在告诉您的RDBMS 执行一个implicit JOIN,它告诉MySQLhey idk what I want so please guess at what I explicitly wantMySQL 响应哪个No problemo, INNER JOIN it is!