1
私は何年ものPostgreSQLに甘んじており、sqliteの限定update
の構文には苦労しています。私は働いている質問を一緒に綴じましたが、私は誰かがより良い方法を知っていることを望んでいます。 (これは非常に見栄えがよくなく、sqliteがエラーメッセージを案内する製品です)。sqlite:Join Tableからmax()を使用してTableAを更新する
シナリオ:
私は、標準のアソシエーションテーブルの設定があります:A、A2B、B
を私が "最新" に対応するB(BはA2B協会を介して接合されてAにすべてのレコードを更新したいですテーブルにあり、「最新」はB列のmax
関数です)。
-- works
UPDATE t_a
SET id_latest_b = (
SELECT id_b FROM (
SELECT t_b.id as id_b,
max(t_b.timestamp_event),
t_a2b.id_a
FROM t_b
JOIN t_a2b
ON (t_b.id = t_a2b.id_b)
GROUP BY t_a2b.id_a
) q_inner
WHERE
t_a.id = q_inner.id_a
);
-- test data
CREATE TABLE t_b (id INT PRIMARY KEY, timestamp_event INT);
CREATE TABLE t_a (id INT PRIMARY KEY, id_latest_b INT REFERENCES t_b(id));
CREATE TABLE t_a2b (id_a REFERENCES t_a(id), id_b REFERENCES t_b(id), PRIMARY KEY (id_a, id_b));
INSERT INTO t_a VALUES (1, NULL);
INSERT INTO t_a VALUES (2, NULL);
INSERT INTO t_a VALUES (3, NULL);
INSERT INTO t_a VALUES (4, NULL);
INSERT INTO t_b VALUES (1, 10);
INSERT INTO t_b VALUES (2, 20);
INSERT INTO t_b VALUES (3, 30);
INSERT INTO t_a2b VALUES (1, 1);
INSERT INTO t_a2b VALUES (1, 2);
INSERT INTO t_a2b VALUES (2, 2);
INSERT INTO t_a2b VALUES (3, 1);
INSERT INTO t_a2b VALUES (3, 2);
INSERT INTO t_a2b VALUES (3, 3);
INSERT INTO t_a2b VALUES (4, 1);
INSERT INTO t_a2b VALUES (4, 4);
見てだけの方法よりよいです! –