ある場合、私は3つのテーブルがあります。SQL - 更新idのすべてのブール値が真
タスク:(t_idは主キーで、all_doneはブール値です)
+------+-------------+
| t_id | all_done |
+------+-------------+
| 1 | 0 |
| 2 | 0 |
+------+-------------+
サブタスク:(S_IDはAです主に行わキーは、ブール値である)
+------+------------+
| s_id | done |
+------+------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 0 |
| 7 | 0 |
+------+------------+
task_subtask:(S_IDとt_idは外部キーあるすべてのサブタスクがタスクに属していない)
。 10+------+------+
| t_id | s_id |
+------+------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 2 | 5 |
+------+------+
表task_subtaskは、どのサブタスクがどのタスクに属しているかを示します。
私の意図は、all_done = 1に、そのタスクのすべてのサブタスクが完了している場合にSQL呼び出しを行うことです。したがって、この例ではall_doneはのために1に設定する必要がありt_id = 2
次のコードが動作しているようですが、私はUPDATEコールにこれを埋めるために管理することはできませんし、私がもし本当にわからないんだけど私はこの出力を取得したい、その文で
SELECT x.t_id, count(x.t_id), SUM(x.done) FROM (
SELECT subtask.s_id, subtask.done, task_subtask.t_id FROM subtask JOIN task_subtask WHERE subtask.s_id = task_subtask.s_id
) AS x GROUP BY x.t_id;
:私は正しい方向に考えてい
+------+---------------+-------------+
| t_id | count(x.t_id) | SUM(x.done) |
+------+---------------+-------------+
| 1 | 3 | 1 |
| 2 | 2 | 2 |
+------+---------------+-------------+
私の最高の試みは、これだったかもしれない:
UPDATE task, (SELECT x.t_id, count(x.t_id), SUM(x.done) FROM (
SELECT subtask.s_id, subtask.done, task_subtask.t_id FROM subtask JOIN task_subtask WHERE subtask.s_id = task_subtask.s_id
) AS x GROUP BY x.t_id)
SET task.all_done = 1 WHERE task.t_id = t_id AND count(x.t_id) = SUM(x.done);
この呼び出しでエラーメッセージが
ERROR 1248(42000)である:すべての派生テーブルは、独自のエイリアス
を持っている必要がありますが、更新コールが希望ならば、私はよく分かりませんこのように働くことさえできます。
ありがとうございました!
これは空のセットを返します – vienya
@vienya ..どういう意味ですか?派生テーブルは何行返されますか? –
ああ、申し訳ありません。私のせい。この例を実際のデータベースに合わせることはできませんでした。今それは働いている。どうもありがとうございました! – vienya