-1

私のクエリは次のとおりです。

SELECT * FROM order_main t
  LEFT JOIN order_pos op ON t.id=op.order_main_id
  LEFT JOIN order_product oprod ON op.id=oprod.order_pos_id
  LEFT JOIN product pr ON pr.id=oprod.product_id
  INNER JOIN(
              SELECT t.id, MAX(pr.hours) as HoursMax FROM order_main t
                LEFT JOIN order_pos op ON t.id=op.order_main_id
                LEFT JOIN order_product oprod ON op.id=oprod.order_pos_id
                LEFT JOIN product pr ON pr.id=oprod.product_id
              WHERE (t.created <= '2013-07-01' AND t.status >= 1 AND t.status < 3 AND pr.hours IS NOT NULL)
                    OR (t.created > '2013-07-01' AND t.payed = 1 AND t.report_sended = 0 AND pr.hours IS NOT NULL) GROUP BY t.id
            ) grouptt ON t.id = grouptt.id
WHERE (t.created <= '2013-07-01' AND t.status >= 1 AND t.status < 3 AND pr.hours IS NOT NULL AND DATE_SUB(NOW(), INTERVAL grouptt.HoursMax HOUR) > t.created)
      OR (t.created > '2013-07-01' AND t.payed = 1 AND t.report_sended = 0 AND pr.hours IS NOT NULL AND DATE_SUB(NOW(), INTERVAL grouptt.HoursMax HOUR) > t.created)

INNER JOIN なしで行う方法はありますか?

アップデート:

遅れている注文をすべて選択しようとしています。

ご覧のとおり、製品テーブルには時間があり、注文 (order_main) のすべての位置 (order_pos) を見つける必要があり、そこから関係 (order_product) を見つける必要があります。ただし、製品のある位置は、注文ごとに複数になる場合があります。そして、MAX の製品時間を見つける必要があります。

各注文から最大の製品時間を見つけている場合(今はINNER JOINで実行しています)、これを注文作成日(t.created)と比較できます。

この sql クエリは非常に複雑だと思います。私はこれをもっと簡単にできるようですか?

ありがとう

4

1 に答える 1

0

order_main のフィールドのみが必要なため、少なくとも外部クエリの結合と条件を取り除くことができます (内部結合 のみを使用します)。

SELECT * FROM order_main om
INNER JOIN
    (SELECT t.id, t.created
     FROM order_main t
     INNER JOIN order_pos op ON t.id = op.order_main_id
     INNER JOIN order_product oprod ON op.id = oprod.order_pos_id
     INNER JOIN product pr ON pr.id = oprod.product_id
     WHERE (t.created <= '2013-07-01' AND t.status IN (1,2))
     OR (t.created > '2013-07-01' AND t.payed = 1 AND t.report_sended = 0)
     GROUP BY t.id
     HAVING DATE_ADD(t.created, INTERVAL MAX(pr.hours) HOUR) < NOW()) AS grouptt
ON om.id = grouptt.id
于 2013-07-12T08:29:39.673 に答える