我的查询(这给了我一个正确的输出)
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
只应在结果中显示一次,但实际存在于多个类别中的结果除外,但您会看到categoryname
和productname
是连续的
感谢您的帮助!
答案 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 + '%'