Access 2013:具有条件和相应值的UPDATE语句存储在另一个表中

时间:2018-02-20 13:14:21

标签: ms-access sql-update multiple-conditions

使用MS-Access 2013,我有一个表( Table_1 ),其中包含多种产品(由 ID 标识)的长格式属性列表(即每个产品有几行(最多500个),尽管产品的行数可能不同):

ID  | Characteristics
----|------------------
1   | characteristc_a
1   | characteristc_aa
1   | characteristc_c
2   | characteristc_b
2   | characteristc_d

根据特定产品的特性,据说具有特定属性或不具有特定属性。特征“转换”为属性的方式在另一个表 Table_2

中定义
Characteristics    | Attribute     | Value
-------------------|---------------|---------
characteristic_a   |  Property_1   |  prop_1a
characteristic_aa  |  Property_1   |  prop_1a
characteristic_b   |  Property_1   |  prop_1b
characteristic_c   |  Property_2   |  prop_2
characteristic_d   |  Property_3   |  prop_3

例如,如果属性特征的产品值是' characteristic_a '或' characteristic_aa ' (或两者),其属性 Property_1 的值应为' prop_1a '。相反,如果其特征值为&#39> characteristic_b ',则 Property_1 属性的对应值应为' prop_1b '等。

最后,Table_3以宽格式收集所有产品的所有属性(即每个产品只有一行):

ID   | Property_1 | Property_2 | Property_3
-----|------------|------------|------------
1    |  prop_1a   |  prop_2    |  NULL
2    |  prop_1b   |  NULL      |  prop_3

我已成功将表2中的条件直接编码到更新语句中,例如:通过使用像

这样的东西
UPDATE Table_3
SET    Property_1 = ‘prop_1a’
WHERE  ('characteristic_a')  IN (SELECT Characteristics FROM Table_1 WHERE Table_3.ID = Table_1.ID)
    OR ('characteristic_aa') IN (SELECT Characteristics FROM Table_1 WHERE Table_3.ID = Table_1.ID)

(因为我对SQL不太熟悉,即使这可能是一种笨拙的编码方式)

但是,“映射表” Table_2 包含2,000多个条目,因此编码所有这些条件将非常麻烦。相反,我希望UPDATE语句自动采取条件以及表2中的结果操作,例如:在伪代码中,例如:

UPDATE Table_3
SET    Property_1 = [Appropriate value from Table_2] 
WHERE  [In all the entries of Table_1 with the same ID as the current row in Table_3] 
       [The attribute Characteristics in Table_1] IN 
       [The terms listed in Table_2 for the attribute Property_1] 

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

Table_2应该有一个ID字段,这个ID应该作为外键保存到Table_1中,而不是冗长的描述值。

构建一个连接主键和外键字段上的两个表的查询。将描述性文本字段拉入查询,然后切换到CROSSTAB设计。设置适当的行和列和值字段。行将是Table_1 ID(可能更具描述性,例如ProdID_FK),Column将是Table_2属性,Value将是Table_2 Value。使用“值”字段中的“最大”功能。

考虑:

TRANSFORM Max(Table2.CharValue) AS MaxOfCharValue
SELECT Table1.ProdID_FK
FROM Table2 RIGHT JOIN Table1 ON Table2.CharID = Table1.CharID_FK
GROUP BY Table1.ProdID_FK
PIVOT Table2.Attribute;

这将生成样本数据的示例输出。

可能不应该使用Value作为任何具有特殊含义的名称。