从两个表更新新创建的表 - 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】:如果TableA
和TableB
有任何变化,我认为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,已经创建成功,请问我如何才能删除这个刚建的表空间?