0

我的要求有点奇怪和具体,请多多包涵。

我有一个 Access 2003 数据库,其中有一个Comments包含数十万行的表。有几个字段 - 我们称它们为A, B, C, Dcomment。列A-C形成表的 PK。因此,您可能有 5、10 或 50 行有不同的注释,但都与A-CPK 相关。

我有另一个名为CORE的表,其中包含一个core具有字段A, B, C, D( A-CPK) 和comment_value_insert.

我想做的事:

Comments中,对于相同A-C行的每个“集合”(字段D可以不同),如果它们的comment值都不匹配某个值(让我们称之为critical),则在 中查找同一行并用和CORE向表中插入comments一个新行。A-DComments.comment = core.comment_value_insert

我什至不确定这是否可以使用 SQL(也许是 VBA?因此是标签)。有什么建议吗?如需进一步说明,请询问。

非常感谢提前。

编辑

为了准确地展示我想要的东西:

如果我的Comments桌子看起来像

A | B | C | D | Comment
1   2   3   b   val1
1   2   3   x   val2
1   2   3   a   val3
2   9   8   z   val4
2   9   8   a   val5
3   3   3   x   val6
END

我的CORE桌子看起来像

A | B | C | D | Comment_value_insert
1   2   3   u   critical1
2   9   8   t   critical2
4   8   6   x   critical3
END

然后我希望将critical1行 fromCORE插入到Comments以及critical2行中,但不是critical3行。

那么Comments表格中的最终产品将是

A | B | C | D | Comment
1   2   3   b   val1
1   2   3   x   val2
1   2   3   a   val3
1   2   3   u   critical1
2   9   8   z   val4
2   9   8   a   val5
2   9   8   t   critical2
3   3   3   x   val6
END
4

2 回答 2

0

**这个版本对我有用**

INSERT INTO comments  
SELECT a, 
       b, 
       c, 
       d, 
       comment_value_insert AS comment  
FROM   core  
WHERE  EXISTS (SELECT comments.*  
               FROM   comments  
               WHERE  core.c = comments.c  
                      AND core.b = comments.b  
                      AND core.a = comments.a)  
       AND NOT EXISTS (SELECT comments.*  
                       FROM   comments  
                       WHERE  core.c = comments.c  
                              AND core.b = comments.b  
                              AND core.a = comments.a  
                              AND core.comment_value_insert = comments.comment)   
于 2013-08-09T08:21:30.330 回答
0

为 INSERT 部分尝试类似的操作。对于 UPDATE 部分,您应该提供更多信息。

- 编辑 -

INSERT INTO Comments ( A, B, C, D, Comment )
SELECT DISTINCT C.A, C.B, C.C, C.D, C.comment_value_insert
FROM Core AS C INNER JOIN Comments as C1 ON C.A = C1.A and C.B = C1.B and C.C = C1.C
WHERE NOT EXISTS (SELECT * FROM Comments AS O WHERE O.Comment = "Critical" AND O.A = C.A AND O.B = C.B AND O.C = C.C);

问候,

于 2013-08-09T12:39:42.650 回答