Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从另一个表更新问题创建表_Mysql_Sql_Sql Server - Fatal编程技术网

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

Mysql 从另一个表更新问题创建表,mysql,sql,sql-server,Mysql,Sql,Sql Server,当我在表a中插入一条记录时,它不会更新从表a派生的表B。我使用了where子句,因为我只需要表B中表a的某些记录。这是我的代码 将表B创建为 从列表中选择* 学生在哪里 ; 当使用新属性student将新记录插入表a时,它不会更新表B。谢谢 您的语句:将表B创建为SELECT*FROM A WHERE STATUS='STUDENT';只需使用SELECT语句生成的结构创建一个表,然后将该语句的结果复制到新表中。它不会保持原始表的最新匹配。如果您想要查看视图,则可能需要查看视图 您可以尝试: C

当我在表a中插入一条记录时,它不会更新从表a派生的表B。我使用了where子句,因为我只需要表B中表a的某些记录。这是我的代码

将表B创建为 从列表中选择* 学生在哪里 ;

当使用新属性student将新记录插入表a时,它不会更新表B。谢谢

您的语句:将表B创建为SELECT*FROM A WHERE STATUS='STUDENT';只需使用SELECT语句生成的结构创建一个表,然后将该语句的结果复制到新表中。它不会保持原始表的最新匹配。如果您想要查看视图,则可能需要查看视图

您可以尝试:

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

如果你想,你可以通过创建一个带有触发器的触发器来实现自动化。当你将行插入表a时,信息被输入表B。我尽了最大努力,但条件是你可能需要稍微调整ir。INSERTED在触发器中用作VLUE INSERTED

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所说,Is将是更好的实践,因为它创建了一个包含所需数据的视图,现在另一个表的视图将实时获取您所需的一切:

CREATE VIEW MyView
AS
SELECT * FROM A WHERE STATUS='STUDENT'
您基本上将视图创建为另一个表,并在需要时调用它,它将实时查询您需要的数据。如果需要,你可以像桌子一样使用它

CREATE TABLE B AS ( SELECT * FROM A WHERE STATUS='STUDENT' ); 
此查询只运行一次,运行时将在A到B中插入当时存在的记录。这将按预期工作

如果希望每次在a中插入一条新记录并在B中输入一些数据,请使用触发器。触发器在触发eventstrigger_事件(如插入、更新、删除)之前或之后自动执行


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

mysql或sql server?首先,这是mysql或sql server底部的标记相互矛盾不同的系统运行sql的方式不同。为什么要这样复制数据?这打破了规范化规则,如果您想要一个只列出学生的单独的表,只需使用一个视图。我创建这样一个表的原因是,只有当status=studentIt听起来像时,表a才在表C中有一个外键,除非这是一个继承的数据库,您应该重新检查您的需求并更改数据库的结构。您不应该有条件外键。