从两个表更新新创建的表 - SQL

Posted

技术标签:

【中文标题】从两个表更新新创建的表 - SQL【英文标题】:Updating New Created Tables From Two Tables - SQL 【发布时间】:2018-07-13 03:53:45 【问题描述】:

我是 sql 新手 我正在为我的数据库使用 myphpadmin 我正在尝试从两个不同的表 TableA 和 Tableb 更新名为 TableC 的新创建的表。我确实合并了列中具有共同值的两个表,并为我的项目创建了一个数据库。但是,当我从 TableA 和 Tableb 更新数据时,TableC 中的数据没有更新。我正在寻找一种方法,如果我更新表 A 和表 B,表 C 也将更新,这可能在 SQL 中吗?我真的很感激任何建议或帮助。提前致谢。

我有三个名为的表;

 TableA:

 id      Name    Section    c_status

 1a      aika    Section1   Active
 2s                         Inactive

============================================

  TableB:

  id     PR_id     Name     Section    

  111    2s      laika     Section2   
  222    2s      Bes       Section3 

用于创建 TableC 的查询

 CREATE TABLE TableC(SELECT * FROM TableA WHERE Name != ''
 UNION
 SELECT TableA.id, TableB.Name, TableB.Section, TableA.c_status FROM TableA 
 INNER JOIN TableB ON TableA.id = TableB.PR_id);

输出

TableC

id   Name   Section     c_status

1a   aika   Section1    Active
2s   laika  Section2    Inctive
2s   Bes    Section3    Inctive

如果我在 TableA 和 TableB 中更新或添加数据,则 TableC 不会更新。 我真的很感激建议。谢谢

【问题讨论】:

所以,你只是想把查询结果放到新表中? 您应该在每次需要更新时使用 CREATE TABLE 查询创建 tableC(不要忘记先删除它),或者您应该使用视图 (w3schools.com/sql/sql_view.asp) 创建 tableC,它会自动每当在调用 tableC 的 SELECT 查询中调用它时都会更新自身 我怀疑您的第三张表应该是 view 而不是 table。然后它会在底层表发生变化时自动“更新”。 @GordonLinoff 正是我的观点 :) ***.com/a/51323873/9006027 【参考方案1】:

如果TableATableB 有任何变化,我认为TableC 不会自动更新。但是,您可以尝试使用此解决方法代码。

TRUNCATE TableC;

INSERT INTO TableC(SELECT * FROM TableA WHERE Name != ''
UNION
SELECT TableA.id, TableB.Name, TableB.Section, TableA.c_status FROM TableA 
INNER JOIN TableB ON TableA.id = TableB.PR_id);

首先,清空TableC 以防止重复。您可以将查询结果放在TableC 中,一旦为空即可。

如果上面的查询不起作用,你可以使用这个。

TRUNCATE TableC;

INSERT INTO TableC(SELECT * FROM TableA WHERE Name != '');
INSERT INTO TableC(
SELECT TableA.id, TableB.Name, TableB.Section, TableA.c_status FROM TableA 
INNER JOIN TableB ON TableA.id = TableB.PR_id);

【讨论】:

感谢您的帮助,但在 union 附近出现错误正确的 sql 语法 非常感谢您的帮助我使用了您建议的第二个代码,但我得到了 eror trancate column id 来自TRUNCATE?【参考方案2】:

我建议为此使用View

首先你应该删除你制作的表格

DROP TABLE IF EXISTS TableC;

然后创建一个视图

CREATE VIEW TableC AS (
SELECT * FROM TableA WHERE Name != ''
UNION
SELECT TableA.id, TableB.Name, TableB.Section, TableA.c_status FROM TableA 
INNER JOIN TableB ON TableA.id = TableB.PR_id
);

创建视图后,您将始终根据 TableA 和 TableB 更新 TableC

SELECT * FROM TableC

如果你不能使用 View 那么你可以在使用 TableC 之前调用下面的代码块

DROP TABLE IF EXISTS TableC;
CREATE TABLE TableC AS (
SELECT * FROM TableA WHERE Name != ''
UNION
SELECT TableA.id, TableB.Name, TableB.Section, TableA.c_status FROM TableA 
INNER JOIN TableB ON TableA.id = TableB.PR_id
);

【讨论】:

以上是关于从两个表更新新创建的表 - SQL的主要内容,如果未能解决你的问题,请参考以下文章

我需要从 mysql 存储过程连接到 Access 数据库来更新我已经在 mysql db 中创建的表

我刚增加了15G的表空间,oracle,已经创建成功,请问我如何才能删除这个刚建的表空间?

如何用SQL语句删除两个表中相同的记录?

oracle中新建的用户怎么查询它所有的表空间

在pl/sql中创建的表空间超出了db_fills的最大值?怎么回事?

创建没有重复的新 SQL 表