2010-06-23 53 views
0

哦,天哪!
我有两个表,第一个(我们称之为NameTable)预置了一组值(id,名称),第二个(ListTable)是空的,但具有相同的列。
现在的问题是:如何将ListTable中的值从NameTable中插入?因此,如果我在NameTable中更改一个名称,那么自动更新ListTable中的值。
有没有插入这个或是否必须以某种特殊的方式创建表?
尝试浏览手册,但没有成功:(PostgreSQL:动态行值(?)

+0

你打算修改“奴隶”表吗?你确定你不需要一个VIEW? – leonbloy 2010-06-23 20:19:21

回答

0

嗯......我有点困惑,究竟你想要做什么或为什么,但这里有一些指向你可能想要采取的事情看看:表继承,触发器和规则

postgresql中的表继承允许一个表共享另一个表的数据,所以,如果你添加一行到基表,它不会显示在但是如果向继承的表添加一行,它现在将显示在两个表中,并且任一位置的更新都会在两个表中反映出来。

触发器允许您设置c在插入,更新或删除操作发生在表上时将运行的ode。这将允许您添加手动描述的行为。

规则允许您设置一个规则,该规则将在满足特定条件时用替代查询替换匹配查询。

如果你描述你的问题进一步在你为什么要这样的行为,可能更容易提出正确的方式去了解的东西:-)

+0

对不起,用我低劣的英语和SQL技能解释有点困难:P但基本上在伪SQL中它会像这样: INSERT INTO table1(name)VALUES(SELECT name FROM table2 WHERE id = 1) 那么当您更改table2中的名称时,table1中的名称也会更改。我认为继承可能是这样的方式? – Seerumi 2010-06-23 11:03:19

+0

是的,它绝对是最优雅的解决方案。 – kasperjj 2010-06-23 11:29:57

1

的建议使用INSERT ... SELECT是最好的用于在同一数据库中的表之间移动的方法。

但是,还有另一种方法来处理自动更新要求。

这听起来像这些都是你的标准:

  • 表A与列(X,Y)
  • (X,Y)是独特
  • 表B还与列定义(定义X,Y)
  • 表A是表B
  • 表B的超集是用来装载从表A的数据和需要与更新要保持同步于表A.

这是与选项ON UPDATE CASCADE外键的工作:

ALTER TABLE B ADD FOREIGN KEY (x,y) REFERENCES A (x,y) ON UPDATE CASCADE; 

现在,不仅会在表A的更新自动更新表B,表B是对含有保护(X ,y)对不在表A中。如果希望记录从表B中自表B删除时自动删除,请添加“ON UPDATE DELETE”。