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子句来实现此目的吗?
在给定时间只会有几个空订单,所以如果对此的最佳答案会显着降低性能,我会使用单独的查询。但我希望将它们包含在此查询中,以便按order.id和其他查询对它们进行排序。只是不想将查询时间加倍,以包含没有项目的1-3个订单。
我正在使用MySQL。提前感谢任何建议。
答案 0 :(得分:9)
只需使用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