从另一个表更新问题创建表

时间:2015-12-02 16:38:26

标签: mysql sql sql-server

当我在表A中插入记录时,它不会更新从表A派生的表B.我使用了where子句,因为我只想要表B中表A中的某些记录。这是我的代码< / p>

创建表B AS( SELECT * FROM A 在哪里状态=&#39;学生&#39; );

使用新属性&#34; student&#34;将新记录插入表A时它没有更新表B.谢谢!

3 个答案:

答案 0 :(得分:0)

您的陈述:CREATE TABLE B AS ( SELECT * FROM A WHERE STATUS='STUDENT' );只是使用您的SELECT语句产生的结构创建一个表,然后将该语句的结果复制到新表中。它不保持原始表的最新匹配。如果这是你想要的,你可能想要查看VIEW

您可以尝试:

CREATE VIEW B AS SELECT * FROM A WHERE STATUS = 'STUDENT';

答案 1 :(得分:0)

如果您愿意,可以通过使用触发器创建触发器来自动执行此操作,当您将行插入表A时,信息将输入到表B中。我尽可能地尝试使用您可能需要调整的条件。 INSERTED 在触发器中用作插入的vlaue

CREATE TRIGGER MyTrigger
ON DBO.TableA
AFTER INSERT, UPDATE 
AS

IF EXITS (SELECT * 
         FROM TABLE_B
          WHERE (SELECT STATUS 
                 FROM INSERTED I 
                 WHERE STATUS = STUDENT))

BEGIN

   INSERT INTO TableB

   SELECT * 
   FROM INSERTED I 
   WHERE STATUS='STUDENT'
END

ELSE 

  RAISEERROR('ROW IS NOT A STUDENT');

如果@rabbit表示要创建一个包含所需数据的视图,现在是另一个表,视图会抓住您需要的所有实时内容,那会更好吗?

CREATE VIEW MyView
AS
SELECT * FROM A WHERE STATUS='STUDENT'

您基本上将视图创建为另一个表,并在需要时随时调用它,它将实时查询您需要的数据。如果需要,你可以像桌子一样使用它。

答案 2 :(得分:0)

CREATE TABLE B AS ( SELECT * FROM A WHERE STATUS='STUDENT' ); 

此查询只运行一次,并且在运行时它会将当时存在的记录插入A到B.这正在按预期工作。

如果你想在每次在B中输入一些数据时插入一条新记录,那就使用触发器。触发事件之前或之后自动执行触发器(触发事件,如INSERT,UPDATE,DELETE)。

有关触发器的详细信息,请参阅ClassPathResource