【发布时间】:2014-05-19 14:11:16
【问题描述】:
我有两张桌子:orders 和 order_items。 Orders 有很多 order_items。可能是这样的order_items:
| id | order_id | product_id |
| 1 | 5 | 7 |
| 2 | 5 | 8 |
当我只为order 使用参数进行查询,并使用拥有进行GROUP BY 时,这是我期望的工作,例如:
SELECT `orders`.* FROM `orders`
INNER JOIN order_items AS bonus_items
ON (bonus_items.order_id = orders.id)
WHERE
(DATE(DATE_ADD(orders.created_at, INTERVAL 4 HOUR)) >= '2013-12-02'
AND DATE(DATE_ADD(orders.created_at, INTERVAL 4 HOUR)) <= '2013-12-02'
AND orders.status = 'payed')
GROUP BY bonus_items.order_id HAVING count(*) = 1
此查询查找具有一个 order_items(一个带有 order_id 的记录)的订单。
但是,当我为 order_items GROUP BY 和 HAVING 添加条件时,我的订单数量不同,例如:
SELECT `orders`.*
FROM `orders`
INNER JOIN order_items AS bonus_items ON (bonus_items.order_id = orders.id)
WHERE (DATE(DATE_ADD(orders.created_at, INTERVAL 4 HOUR)) >= '2013-12-02'
AND DATE(DATE_ADD(orders.created_at, INTERVAL 4 HOUR)) <= '2013-12-02'
AND orders.status = 'payed') AND (bonus_items.user_id = 0))
GROUP BY bonus_items.order_id
HAVING count(*) = 1
为什么我不能对连接表使用条件?
【问题讨论】:
-
id 似乎没有任何作用。建议你扔掉它。
-
您能否将sqlfiddle.com 中的表格和一些示例数据以及所需的输出添加到问题中?
-
不,我有真正的数据库,这对我有什么帮助?
-
@IgorBiryukov 如果您准备了问题的示例版本,我们会更容易为您提供帮助。
-
@IgorBiryukov - 使用 SQL Fiddle 通过帮助我们来帮助您。如果你给我们一个具体的例子来使用它真的很有帮助,而不是一切都是概念性的。