0
的子集的最小更新表這是我的測試數據庫:MySQL的:與表
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`parent` int(10) unsigned DEFAULT NULL,
`number` int DEFAULT NULL
) ENGINE=InnoDB;
INSERT INTO t1 SET id=1, parent=NULL, number=NULL;
INSERT INTO t1 SET id=2, parent=NULL, number=NULL;
INSERT INTO t1 SET id=3, parent=NULL, number=NULL;
INSERT INTO t1 SET parent=1, number=4;
INSERT INTO t1 SET parent=1, number=2;
INSERT INTO t1 SET parent=1, number=3;
INSERT INTO t1 SET parent=2, number=10;
INSERT INTO t1 SET parent=2, number=20;
INSERT INTO t1 SET parent=2, number=30;
INSERT INTO t1 SET parent=3, number=3;
INSERT INTO t1 SET parent=3, number=2;
INSERT INTO t1 SET parent=3, number=1;
我想每個家長的「數量」設置爲最小的「數字」的其孩子:
UPDATE t1
SET number=(SELECT min(number) FROM t1 AS t2 WHERE t1.id=t2.parent)
WHERE t1.parent IS NULL;
但是,這給了我一個錯誤: ERROR 1093(HY000):您不能指定目標表 'T1' 的更新在FROM子句
我理解的方式將是一個JOIN ,但我沒有得到我t right:
UPDATE t1
LEFT JOIN
(SELECT min(t2.number) AS minnumber, t2.parent AS parent FROM t1 AS t2) t2
ON t1.id = t2.parent
SET t1.number = t2.minnumber
WHERE t1.parent IS NULL;
但是之後id1,id2,id3的「數字」只是NULL。我認爲這是因爲在JOIN中我不能限制t2只在實際的父母上工作,所以它在整個表上工作。任何想法?
啊,好的。非常感謝! – Werner 2014-08-28 19:28:52