【问题标题】:SQL trigger, insert into statementSQL触发器,插入语句
【发布时间】:2011-09-29 06:54:55
【问题描述】:

我有两个名为 scan_screscan_rsc 的 sql 表。扫描表如下所示:

CREATE TABLE scan_sc 
( 
   id_sc int(4), 
   Type_sc varchar(255), 
   ReScan_sc varchar(255), 
   PRIMARY KEY  (id_sc)
)

扫描文档时,我在扫描表中插入一行。如果这次扫描的结果很差,我必须重新扫描,因此我有一个重新扫描表。

CREATE TABLE rescan_rsc 
(
   id_rsc int(4), 
   Scan_rsc varchar(255), 
   PRIMARY KEY  (id_rsc)
)

问题是,我希望有一个触发器,它会在scan_sc 表中用"x" 填充列ReScannet_sc,所以我可以看到这里出现了一些问题。

触发器必须在重新扫描表中的 id 与扫描表中相同的情况下执行此操作。

希望大家理解我的问题。

提前致谢。

【问题讨论】:

  • WHAT 数据库和哪个版本? SQL 只是结构化查询语言 - 许多 数据库系统使用的语言 - SQL 不是 数据库产品...这样的东西通常是特定于供应商的 - 所以我们真的需要知道您使用的是什么数据库系统....
  • 您的scan_screscan_rsc 表都没有名为id_sd 的列,但这是两者的主键??
  • 它是一个 mysql 数据库。现在主键是正确的。

标签: mysql sql triggers insert where


【解决方案1】:

您真的需要ReScan_sc 列和触发器吗?

通过一个简单的JOIN,您可以在完全不使用ReScan_sc 列的情况下找出您的scan_sc 表中被重新扫描的记录。
有几种可能:

显示所有扫描,如果有的话,还有一个带有重新扫描 ID 的附加列:

SELECT scan_sc.*, rescan_sc.id_rsc
FROM scan_sc
LEFT JOIN rescan_sc ON scan_sc.id_sc = rescan_sc.id_rsc

仅显示已重新扫描的扫描:

SELECT scan_sc.*
FROM scan_sc
INNER JOIN rescan_sc ON scan_sc.id_sc = rescan_sc.id_rsc

(我假设id_scid_rsc 是主键,而PRIMARY KEY (id_sd) 是一个错字,就像marc_s 在他的评论中指出的那样)

【讨论】:

  • 然后我没有表格,如果我理解您的解决方案正确,用户可以在其中输入重新扫描的文档。
  • 你仍然会拥有两张桌子。 rescan_sc 表将保持原样,只有 scan_sc 表中的 Rescan_sc 列将消失(您根本不需要触发器)。
  • 你没有必须这样做,这只是一个替代建议。如果你愿意,你仍然可以用触发器来做(但是我不能帮助你,因为我不知道如何在 MySQL 中编写触发器)。
  • 我想我会使用你的答案,这对我来说更容易理解。而且我对触发器没有太多经验。
猜你喜欢
  • 1970-01-01
  • 2016-10-13
  • 2016-05-29
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
相关资源
最近更新 更多