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

irr*_*ons 3 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
Run Code Online (Sandbox Code Playgroud)

我需要这个包含没有相应order_row条目的行(这将是一个尚未包含任何项目的订单).似乎必须通过添加ON或WHERE子句来实现此目的吗?

在给定时间只会有几个空订单,所以如果对此的最佳答案会显着降低性能,我会使用单独的查询.但我希望将它们包含在此查询中,以便按order.id和其他查询对它们进行排序.只是不想将查询时间加倍,只包括没有项目的1-3个订单.

我正在使用MySQL.提前感谢任何建议.

ber*_*rty 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
Run Code Online (Sandbox Code Playgroud)