使用关键字表包含

时间:2018-12-28 17:22:37

标签: tsql lookup contains access

我想创建一个查询,该查询基于引用来自不同表的关键字字段的关键字查找(CONTAINS)来填充一个表中的字段。请参阅下面的示例表:

tbl_Parts
+----+------+-------------+------+
| ID | Comp |    Desc     | Type |
+----+------+-------------+------+
|  1 |  112 | Brg, Ball   |      |
|  2 |  245 | Bearing, X  |      |
|  3 |  364 | Mtg Ring, 1 |      |
|  4 |  445 | Pump, 2x3   |      |
+----+------+-------------+------+

tbl_Ref
+----+---------+-------+
| ID | Keyword | Type  |
+----+---------+-------+
|  1 | Bearing | O     |
|  2 | Ring    | S     |
|  3 | Pump    | P     |
|  4 | Disc    | O     |
+----+---------+-------+

具体来说,我想使用tbl_Ref.Type填充tbl_Parts.Type,其中tbl_Parts.Desc包含tbl_Ref.Keyword。

但是,我找不到使用字段作为参考的CONTAIN函数的任何示例。我想查询将类似于以下内容:

SELECT *
FROM (
SELECT tbl_Parts.Comp, tbl_Parts.Desc, tbl_Ref.Type AS tbl_Parts.Type 
FROM tbl_Ref, tbl_Parts 
WHERE tbl_Parts.Desc CONTAINS tbl_Ref.Keyword
) AS x;

我知道这远非正确,但这是我目前能想到的一切。

在某些情况下,tbl_Parts.Desc包含多个关键字。在这种情况下,我想连接所有类型匹配项。但是,此功能目前尚不优先。

应该注意,我可以在tbl_Parts设计,独立查询或追加查询中的查找查询中执行此操作。

任何有关此的意见或建议都将非常棒,

2 个答案:

答案 0 :(得分:0)

CONTAINS需要使用字符串文字作为第二个参数,因此我怀疑是否有可能。

  

包含(
           {
              column_name | (column_list)
            | *
            | PROPERTY({column_name},'property_name')
           }
           ,“            [,LANGUAGE language_term]
         )

您可以改用LIKE

SELECT tbl_Parts.Comp, tbl_Parts.Desc, tbl_Ref.Type AS [tbl_Parts_Type] 
FROM tbl_Ref
JOIN tbl_Parts 
  ON tbl_Parts.Desc LIKE '%' +  tbl_Ref.Keyword + '%';
  

在某些情况下,tbl_Parts.Desc包含多个关键字。在这种情况下,我想连接所有类型匹配项。但是,此功能目前尚不优先。

SELECT tbl_parts.ID, tbl_Parts.Comp, tbl_Parts.Desc,
  STRING_AGG(tbl_Ref.Type, ',') WITHIN GROUP(ORDER BY tbl_Ref.ID) AS tbl_Parts_Type 
FROM tbl_Ref
JOIN tbl_Parts 
  ON tbl_Parts.Desc LIKE '%' +  tbl_Ref.Keyword + '%'
GROUP BY tbl_parts.ID, tbl_Parts.Comp, tbl_Parts.Desc;

答案 1 :(得分:0)

由于您最终打算使用从data <- as.data.frame(matrix(rnorm(60),20,3)) data$veg <- c(rep("Tree (n=2)", 4),rep("Bush (n=4)", 4),rep("Shrubbery (n=6)", 4), rep("Aquatic (n=2)",4),rep("Control (n=7)", 4)) names(data) <- c("A", "B", "C", "veg") melted <- melt(data) ggplot(melted, aes(variable, value)) + geom_point()+ facet_grid(~veg)+ theme(strip.text.x = element_text(size = 14)) 查询中获得的值填充tbl_parts.type字段(大概使用UPDATE查询),因此您可能需要使用域汇总函数,例如SELECT来获取适当的值,否则MS Access将抱怨该查询将不可更新。

为此,我提出以下建议:

DLookup

如果update tbl_parts p set p.type = dlookup("type", "tbl_ref", "'" & p.desc & "' like '*' & keyword & '*'") 包含引号,则当然会被破坏。

示例:

enter image description here

enter image description here

在SQL之上运行后:

enter image description here

在描述与多个关键字匹配的情况下,您需要将多种类型连接到以逗号分隔的字符串中,那么我建议根据{{1 }}表达式,然后使用VBA遍历结果记录集。