SQL LIKE返回错误的结果和双行

时间:2014-08-04 09:52:26

标签: sql sql-server tsql stored-procedures sql-like

我的查询(这给了我一个正确的输出)

SELECT      
   CONCAT(Category.CategoryName, ': ',Product.ProductName) AS SearchOut,
 Product.ProductID
FROM Product
    ,Category
    ,ParentCategory
    ,ProductCategory
WHERE ParentCategory.ParentCatID = Category.CategoryID
   AND Category.CategoryID = ProductCategory.CategoryID 
   AND ProductCategory.ProductID = Product.ProductID

但这将是一个搜索功能,所以我希望我的LIKE

这是我的LIKE SQL继续第一个

   AND Category.CategoryName LIKE '%' + @SearchString + '%'
   OR Product.ProductName LIKE '%' + @SearchString + '%'
   OR Product.Description LIKE '%' + @SearchString + '%'
   OR Product.Artnr LIKE '%' + @SearchString + '%'
   OR ParentCategory.ParentCatName LIKE '%' + @SearchString + '%'

然后查询全部搞砸了,一切都错了,行数多了一倍。

就像存在的每一行的额外行一样。

我还尝试在Joins中首先编写代码片段,但它完全没错。

Product只应在结果中显示一次,但实际存在于多个类别中的结果除外,但您会看到categorynameproductname是连续的

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是因为你的病情没有括号。它应该如下:

AND (Category.CategoryName LIKE '%' + @SearchString + '%'
    OR Product.ProductName LIKE '%' + @SearchString + '%'
    OR Product.Description LIKE '%' + @SearchString + '%'
    OR Product.Artnr LIKE '%' + @SearchString + '%'
    OR ParentCategory.ParentCatName LIKE '%' + @SearchString + '%')

避免这种情况的好方法是切换到ANSI连接。这样,您的连接条件不会与过滤条件混合,不需要括号:

SELECT CONCAT(Category.CategoryName, ': ',Product.ProductName) AS SearchOut
     ,Product.ProductID
FROM Product
JOIN ProductCategory ON ProductCategory.ProductID = Product.ProductID
JOIN Category ON Category.CategoryID = ProductCategory.CategoryID
JOIN ParentCategory ON ParentCategory.ParentCatID = Category.CategoryID
WHERE Category.CategoryName LIKE '%' + @SearchString + '%'
   OR Product.ProductName LIKE '%' + @SearchString + '%'
   OR Product.Description LIKE '%' + @SearchString + '%'
   OR Product.Artnr LIKE '%' + @SearchString + '%'
   OR ParentCategory.ParentCatName LIKE '%' + @SearchString + '%'