2017-08-07 164 views
0

。前幾天,我這裏寫一個問題,得到了回答,幫我解決了我認爲在當時是我的項目:選擇部分字符串匹配(全字匹配)

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,)); 

當時,我只覺得惟有我需要尋找精確匹配,因爲我已經發現,我需要加入對部分匹配以及那裏是在至少1個完整的常用單詞給兩個字符串正在加入。例如,如果我們加入「燒杯」和「巨大的大燒杯」,他們應該加入,因爲他們具有「燒杯」的共同點......

我已嘗試將其他問題的前一個查詢修改爲佔這基於我在這裏找到的一些鏈接在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

既然你沒有發佈你之前工作的完整語法,當我比較早些時候,我發現你的新查詢有更多的變化,而不僅僅是改變你的選擇標準。我建議你通過刪除任何不需要的簡單測試來簡化語法,然後慢慢地加回去。 –

+0

好吧,我更新了我的查詢,我可以更清楚地知道我原來做了什麼 – mkheifetz

+0

現在您發佈了之前和當前版本,請注意OLD之間有很大區別:FROM Analytics INNER JOIN ... = IIF( Product.Category ... and NEW:FROM Analytics INNER JOIN ... = IIF((SELECT DISTINCT Product.Category –

回答

1

編輯#1:增加了SQL樣例,用於填充要用空格搜索的字段,以便查找整個單詞。

不知道你的數據量是多少,但我下面包含的SQL工作有點像你想要的那樣。你的方法存在的一個缺陷是,當你試圖找到'字符串中的單詞'時,你不能在前面或後面填充空格,除非你填充搜索項和要搜索的字符串(通常,文本字段中沒有尾隨空格)。

我只做Field4到Field7,所以你需要調整。

注: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])); 
+0

我剛試過跑步如下所示,並獲得與語法錯誤完全相同的錯誤消息:SELECT DISTINCT Product.Category,Analytics.Unique,Product.ID,Product.Family FROM Analytics INNER JOIN Product ON Analytics.Search = IIF(SELECT DISTINCT Product (((Product.Category)= [Analytics]![Search])) OR((Product(Product(Product(Product(Product(Product(((Product.Field4)= [Analytics]![Search])) – mkheifetz

+0

OR(((Product.Field5)= [ (((Product.Field6)= [Analytics]![Search])) OR(((Product.Field7)= [Analytics]![Search]));所以我不確定問題是什麼。另外,我想我不完全理解你寫的東西。是不是如果有一場比賽應該是唯一的比賽類型,因爲它也包含了完整的比賽? – mkheifetz

+1

首先,嘗試我提供的SQL。如果它有效,那麼就有希望。其次,使用查詢設計器查看我的SQL,而不僅僅是查看SQL。這將更好地解釋它。對於你說應該只有一個'Like'匹配,是的,你可以改變我的SQL來使用我提供的使用LIKE的例子。但是,如前所述,您需要在'Product.Category'和'Fieldxxx'(即SELECT DISTINCT''&[Category]&'AS XX,Analytics)的前後填充空格。 Unique,Product.ID,Product.Family ...) –

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 *' 
) 

但你不評估該查詢的結果,你想用這個查詢的結果做什麼?有沒有=,>或<評估結果

你也錯過了最後一條if語句中的錯誤陳述。欲瞭解更多解釋,請訪問:https://support.office.com/en-us/article/IIf-Function-32436ecf-c629-48a3-9900-647539c764e3

+0

我想我明白你的意思了,所以我只是用「=」號進行了更新,但得到了完全相同的語法錯誤消息,查詢表達式分析中的語法錯誤.Search = IIF(.... :: 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,分析WHERE'&Product.Category&''Like'* Product.Category *')= Analytics.Search,Product.Category,IIF(Product.Field4 = Analytics.Search,Product.Field4)); – mkheifetz