本文共 699 字,大约阅读时间需要 2 分钟。
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.提前感谢任何建议.
解决方法:
只需使用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
标签:sql,mysql,join,inner-join
来源: https://codeday.me/bug/20190725/1535456.html
转载地址:http://rtznv.baihongyu.com/