2011-09-29 149 views
0

我有两个sql表,分别叫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) 
) 

的问题是,我想有一个触发器,它们将在列ReScannet_sc填充的"x",在scan_sc表,这样我就可以看到,一直在这里的一些问题。

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

希望你们都明白我的问题。

在此先感谢。

+2

您正在使用哪些DBMS? –

+4

**什么**数据库和哪个版本?? ** SQL **只是结构化查询语言 - 许多**数据库系统使用的语言 - ** SQL **是** NOT **数据库产品......这类东西通常是**供应商 - 特定的** - 所以我们真的需要知道你正在使用的数据库系统**。 –

+1

Neiter你的scan_sc或你的'rescan_rsc'表都有一个名为'id_sd'的列,但这是主键对彼此而言??其中一个mysql数据库 –

回答

1

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

使用简单的JOIN,您可以找到scan_sc表中已重新扫描的记录,根本不使用ReScan_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)

+0

然后我没有tabel,用户可以键入重新扫描的文档,如果我理解您的解决方案正确。 – Thomas

+0

你仍然有两个表。 'rescan_sc'表将保持原样,只有'scan_sc'表中的'Rescan_sc'列将不再需要(而且根本不需要触发器)。 –

+0

你不**有**这样做,这只是一个替代的建议。如果你愿意的话,你仍然可以用触发器来做到这一点(但之后我无法帮助你,因为我不知道如何在MySQL中编写触发器)。 –