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 の注文を含めるためだけに、クエリ時間を 2 倍にしたくないだけです。

私は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 に答える