表1
id class_id class
1
2
3
表2
sameid class_id
2 20
3 30
1 40
表3
class_id desc
30 forest
40 urban
20 water
我想通过加入Table1-Table2-Table3将Table3.class_id和Table3.desc插入Table1.class_id和Table1.class。
所以我尝试:
INSERT INTO Table1 (class_id,class)
SELECT Table3.class_id, Table3.desc
FROM Table2
INNER JOIN Table3 ON Table2.class_id=Table3.class_id
WHERE Table1.id = Table2.sameid
但是我得到了错误:表“ Table1”的引用FROM子句条目无效。我在做什么错了?
答案 0 :(得分:2)
我们可以在以下CTE的帮助下进行更新联接:
class CustomNavigationController: UINavigationController {
override var prefersStatusBarHidden: Bool {
return true
}
}
此处的策略是创建一个CTE,其中包含我们要在更新中使用的所有列,这些列可以由WITH cte AS (
SELECT t2.sameid, t2.class_id, t3.desc
FROM table2 t2
INNER JOIN table3 t3
ON t2.class_id = t3.class_id
)
UPDATE table1 AS t1
SET
class_id = t2.class_id,
class = t2.desc
FROM cte AS t2
WHERE t1.id = t2.sameid;
寻址,并映射到sameid
中的id
。然后,我们只使用Postgres更新联接来引入值。
答案 1 :(得分:0)
我知道已经存在一个可接受的答案,但是如果您希望保持“ Table1”概念的最新状态而不必定期插入更多数据,则可以利用视图
CREATE VIEW Table1_vw AS
SELECT Table3.class_id, Table3.desc
FROM Table2
INNER JOIN Table3 ON Table2.class_id=Table3.class_id
WHERE Table1.id = Table2.sameid
然后,您可以查询Table1_vw
,就像它是真实表一样
SELECT * FROM Table1_vw;
编辑:通读注释以查看插入和更新在视图上下文中的工作方式。