4

より大きなクエリに含めるサブクエリを作成しようとしています。作成しているサブクエリは、メイン列からa.workorder_idを取得する必要があります。

これは機能します(x.workorder_id = '805'に注意してください)

SELECT a.* , 
( SELECT SUM( maxes ) qty 
  FROM  ( 
     SELECT MAX( qty ) maxes 
     FROM `rework_line` x 
     WHERE x.workorder_id = '805' 
     GROUP BY x.size 
  ) as tba 
) tmpsum 
FROM rework_line a 
WHERE a.workorder_id = '805' 
GROUP BY a.workorder_id

しかし、x.workorder_id = a.workorder_idを変更すると、機能しなくなり、通知されます

#1054-'where句'の不明な列'a.workorder_id'

SELECT a.* , 
( SELECT SUM( maxes ) 
  qty FROM  ( 
     SELECT MAX( qty ) maxes 
     FROM `mtborah_rework_line` x 
     WHERE x.workorder_id = a.workorder_id 
     GROUP BY x.size 
  ) as tba 
) tmpsum 
FROM mtborah_rework_line a 
WHERE a.workorder_id = '805' 
GROUP BY a.workorder_id

忘れてしまった簡単なことだと思いますが、どうすればいいのかわからないので、freenodeのmysqlルームで聞いてみたところ、結合として書き直すだけでした。私が持っているクエリのために不可能ですこのテーブルに再参加すると、カウントと合計がなくなります

4

1 に答える 1

5

多分私は何かが欠けているかもしれませんが、相関サブクエリの代わりに結合でサブクエリを使用してこれを書き直してください:

SELECT a.*, qty
FROM mtborah_rework_line a 
LEFT JOIN
(
  SELECT SUM(maxes) qty, workorder_id
  FROM
  (
    SELECT MAX( qty ) maxes, x.workorder_id
    FROM `mtborah_rework_line` x 
    GROUP BY x.size, x.workorder_id
  ) m
  GROUP BY workorder_id
) q
  on a.workorder_id = q.workorder_id
WHERE a.workorder_id = '805';

またはこの方法でも:

SELECT a.*, SUM(maxes) qty
FROM mtborah_rework_line a 
LEFT JOIN
(
  SELECT MAX(qty) maxes, x.workorder_id
  FROM `mtborah_rework_line` x 
  GROUP BY x.size, x.workorder_id
) q
  on a.workorder_id = q.workorder_id
WHERE a.workorder_id = '805' 
GROUP BY a.workorder_id;
于 2013-02-07T15:00:36.053 に答える