几天前我在这里写了一个问题,得到了回答并帮助我解决了当时我的想法:
Query only pulling in output from one column instead of all columns
这是先前有效的,没有问题:
SELECT DISTINCT Product.Category, Analytics.Unique, Product.ID,
Product.Family
FROM Analytics INNER JOIN Product ON Analytics.Search = IIF(Product.Category
= Analytics.Search, Product.Category, IIF(Product.Field4 = Analytics.Search,
Product.Field4,));
当时,我只觉得我只需要查找完全匹配,我发现我需要加入部分匹配,其中至少有一个完整的常用字,这两个字符串都是加入。例如,如果我们加入" Beakers" vs"巨大的烧杯"他们应该加入,因为他们有烧杯"共同的......
我已经尝试从其他问题修改我之前的查询以基于我在stackoverflow上找到的一些链接来解释这一点,我不断收到语法错误,它并没有真正指出问题所在。这是我的查询(它只适用于1列,没有复制粘贴到所有这些,因为它仍然不能用于某些原因),我只显示几列,因为它们反复重复,并使它更容易读:
SELECT DISTINCT Product.Category, Analytics.Unique, Product.ID,
Product.Family
FROM Analytics
INNER JOIN Product ON Analytics.Search = IIF((SELECT DISTINCT
Product.Category
FROM Product, Analytics
WHERE ' ' & Product.Category & ' '
Like '* Product.Category *'), Product.Category,
IIF(Product.Field4 = Analytics.Search, Product.Field4,));
我尝试添加的这个部分出了问题,因为根据我的另一个问题它完全匹配之前有效:
Product ON Analytics.Search = IIF((SELECT DISTINCT Product.Category FROM
Product, Analytics WHERE ' ' & Product.Category & ' ' Like '*
Product.Category *'),
答案 0 :(得分:1)
编辑#1:添加了SQL样本,用空格填充要搜索的字段,以便查找整个单词。
不确定您的数据量是多少,但下面包含的SQL 有点就像您想要的那样。你的方法中的一个缺陷是,当你试图找到“字符串中的单词”时,你不能在正面或背面填充空格,除非你同时填充搜索术语和要搜索的字符串(通常,文本字段中没有尾随空格。)
我只通过Field7做了Field4,所以你需要调整。
注意:WHERE子句中条件的第一部分查找完全匹配;第二个标准是寻找填充的单词;第三个标准在“Fieldxx”
中查找匹配项这是用于填充您搜索的每个字段的SQL:
SELECT DISTINCT ' ' & [Category] & ' ' AS MyCat, Analytics.Unique, Product.ID, Product.Family
FROM Product, Analytics
WHERE (((' ' & [Category] & ' ')=[Analytics]![Search]
Or (' ' & [Category] & ' ') Like "* " & [Analytics]![Search] & " *"))
OR (((' ' & [Field4] & ' ') Like "* " & [Analytics]![Search] & " *"))
OR (((' ' & [Field5] & ' ') Like "* " & [Analytics]![Search] & " *"))
OR (((' ' & [Field6] & ' ') Like "* " & [Analytics]![Search] & " *"))
OR (((' ' & [Field7] & ' ') Like "* " & [Analytics]![Search] & " *"));
或者,一个非常简单的例子:
SELECT DISTINCT Product.Category, Analytics.Unique, Product.ID, Product.Family
FROM Product, Analytics
WHERE (((Product.Category)=[Analytics]![Search]))
OR (((Product.Category) Like "* " & [Analytics]![Search] & " *"))
OR (((Product.Field4)=[Analytics]![Search]))
OR (((Product.Field5)=[Analytics]![Search]))
OR (((Product.Field6)=[Analytics]![Search]))
OR (((Product.Field7)=[Analytics]![Search]));
答案 1 :(得分:0)
您的第一份IIF声明存在问题。 IIF声明有3个部分。
IIf ( experession , truepart , falsepart )
表达式是您要评估的内容。它通常包含= ,> or <
个标志
让我们来看你的第一个IIF声明:
iif((SELECT DISTINCT product.category FROM product, analytics WHERE ' ' & product.category & ' ' LIKE '* Product.Category *') , product.category,IIF(.....))
所以你的表达式部分包含这个查询:
(
SELECT DISTINCT product.category
FROM product, analytics
WHERE ' ' & product.category & ' ' LIKE '* Product.Category *'
)
但是你没有评估该查询的结果,你试图用该查询的结果做什么?有没有=,&gt;或者&lt;评估结果
你也错过了最后一句if语句中的false语句。如需更多说明,请访问:https://support.office.com/en-us/article/IIf-Function-32436ecf-c629-48a3-9900-647539c764e3