访问SQL:使用通配符左连接

时间:2017-08-14 14:10:05

标签: sql ms-access

这似乎应该比它更容易。

我正在尝试在Access中将两个表连接在一起。他们加入了“产品”领域。一个是包含产品子集费率的参考表,另一个是所有产品的销售数据。

问题是销售产品可以在产品中添加两个字符的前导名称。例如,产品可以作为T2202或U-T22​​02出售。我需要从参考表中选择这些产品的变体,但我还需要过滤掉不相关的产品。

我目前的尝试根本没有奏效;他们要么留下太多,要么取出太少。 尝试1(注意这些是精简的例子,因为还有许多其他不相关的条件)

SELECT *
FROM table1 LEFT JOIN table2 on table1.product LIKE "*" & table2.product 

尝试2

SELECT *
FROM table1 LEFT JOIN table2 ON table1.product = table2.product
WHERE table1.product LIKE "*" & table2.product

或者,我可以将数据的副本添加到引用表中并添加前导字符,但这不是很理想。

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

SELECT *
FROM table1 LEFT JOIN table2 ON table1.product = table2.product 
                             OR table1.product = CONCAT('U-', table2.product)

如果您有前缀列表,则可以添加更多OR语句

答案 1 :(得分:0)

我原本希望你的解决方案有效,但我不熟悉Access,也许还有一些额外的先决条件,如引号或类似的东西。

您可以尝试这样做:

SELECT    *
FROM      table1 
LEFT JOIN table2 
       on table1.product = right(table2.product, len(table1.product))

这应该使table1.producttable2.product的子字符串匹配,其中所有右手字符的长度都为table1.product

当然,更好的解决方案(尽管此时可能对您没有帮助)是清理输入并具有数据库强制的参照完整性。这样你就不会有这个问题。