3

'tasks_processes'という次のテーブルがあります。

id| task_id | process_id | start | end  
 1| 2       | 43         | 0     | 250
 2| 2       | 82         | 250   | 500
 3| 2       | 21         | 500   | 750

したがって、「開始」列と「終了」列は範囲の境界を表し、タスク内で一意です。新しいプロセスの場合、次のようにINSERTSELECTクエリを実行する必要があります。

INSERT INTO tasks_processes (start,end,task_id,process_id) 
    SELECT 
        COALESCE ((SELECT MAX(end) FROM tasks_processes WHERE task_id=2),0) as new_val , 
        new_val + 250, 
        2, 
        12;

つまり、以前に計算した値に基づいて値を挿入する必要があります。しかし、MySQLは私にDatabaseErrorを与えます:そのような列はありません:new_val

この問題を解決する方法は?

4

2 に答える 2

1

次のように、サブクエリを繰り返す必要があります。

INSERT INTO tasks_processes (start,end,task_id,process_id) 
SELECT COALESCE ((SELECT MAX(end) FROM tasks_processes WHERE task_id=2),0), 
       COALESCE ((SELECT MAX(end) FROM tasks_processes WHERE task_id=2),0) + 250, 
       2, 
       12;

または、次のようなものを使用できます。

INSERT INTO tasks_processes (start,end,task_id,process_id) 
SELECT new_val, new_val+250, 2, 12
FROM (SELECT coalesce(MAX(end), 0) as new_val FROM tasks_processes WHERE task_id=2) s;
于 2013-01-28T16:51:41.913 に答える
0

new_val列として使用することはできません。これを試してください

 INSERT INTO tasks_processes (start,end,task_id,process_id) 
SELECT 
    COALESCE ((SELECT MAX(end) FROM tasks_processes WHERE task_id=2),0) as new_val , 
    COALESCE ((SELECT MAX(end) FROM tasks_processes WHERE task_id=2),0) + 250, 
    2, 
    12;
于 2013-01-28T16:52:52.907 に答える