SQL Join包括表a中的行,表b中没有匹配项

时间:2013-02-27 23:36:33

标签: mysql sql join inner-join

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。提前感谢任何建议。

1 个答案:

答案 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