4
SELECT orders.* FROM orders JOIN order_rows 
  ON orders.id = order_rows.order_id 
  WHERE order_rows.quant <> order_rows.quant_fulfilled 
  GROUP BY orders.id 
  ORDER BY orders.id DESC

我需要它来包含没有相应 order_row 条目的行(这将是一个还没有项目的订单)。似乎必须有一种方法可以通过添加到 ON 或 WHERE 子句来做到这一点?

在给定时间只会有几个空订单,因此如果对此的最佳答案会显着降低性能,我将使用单独的查询。但我希望将它们包含在此查询中,以便它们按orders.id 与其余部分一起排序。只是不想将查询时间加倍,只是为了包括没有项目的 1-3 个订单。

我正在使用 MySQL。提前感谢您的任何建议。

4

1 回答 1

10

只需使用LEFT JOIN而不是JOIN. 您将获得所有订单行。

SELECT orders.* FROM orders LEFT JOIN order_rows 
  ON orders.id = order_rows.order_id 
  WHERE order_rows.quant IS NULL OR order_rows.quant <> order_rows.quant_fulfilled 
  GROUP BY orders.id 
  ORDER BY orders.id DESC
于 2013-02-27T23:41:13.680 回答