簡體   English   中英

SQL 查詢並集兩張表,通過多個關鍵字搜索多個列

[英]SQL Query union two tables, search multiple columns by multiple keywords

我在創建可以按關鍵字搜索結果的查詢或存儲過程時遇到困難。

我的 SQL 小提琴在這里:

http://sqlfiddle.com/#!18/48eaa8/1/0

我需要能夠允許我的用戶按關鍵字搜索。

例如,在上面的小提琴中,用戶應該能夠輸入“sony colour”或“sony 87154316459”來跨多個列查找結果。

我將如何 go 在存儲過程中執行此操作? 為了簡潔起見,我編輯了我的代碼,所以它比這復雜得多。 不幸的是,它不能從 Linq 轉換為 SQL。

您是否考慮過將您的查詢放入一個列表中,這樣您就可以不使用“like”了,而是執行以下操作:

SELECT * FROM Product WHERE ManufacturerName In ('Sony','Monitor') OR ProductName in ('Sony','Monitor')

根據您的問題更新,原始概念成立並且存儲的過程如下所示:

Create Table Product (
  ProductId int,
  ManufacturerId varchar(50),
  ProductName varchar(50),
  Upc varchar(50)
);
Create Table ProductVariation (
  ProductVariationId int,
  ProductId int,
  VariationName varchar(50),
  Upc varchar(50)
);
Create Table Manufacturer (
  ManufacturerId int,
  ManufacturerName varchar(50)
);
GO
Create OR ALTER Procedure p_SearchProduct(@searchList varchar(max))
AS
    BEGIN
      DECLARE @searchValue varchar(max);
      set @searchValue = '%' + Replace(@searchList,' ','%') + '%';
      BEGIN
      with SearchList
      as
      (
      SELECT value as SearchItem
      FROM STRING_SPLIT(@searchList, ' ')  
      WHERE LTRIM(RTRIM(value)) <> ''  
      ), SearchData as
      (
        SELECT
        p.ProductId,
        NULL AS 'ProductVariationid',
        m.ManufacturerName,
        ProductName,
        UPC
        FROM Product p
        INNER JOIN Manufacturer m ON m.ManufacturerId = p.ManufacturerId
        UNION
        SELECT 
        v.ProductId,
        v.ProductVariationId,
        m.ManufacturerName,
        p.ProductName + ' (' + v.VariationName + ')' AS 'ProductName',
        v.UPC
        FROM ProductVariation v
        INNER JOIN Product p ON p.ProductId = v.ProductId
        INNER JOIN Manufacturer m ON m.ManufacturerId = p.ManufacturerId
      )
      SELECT * FROM SearchData p
      where p.ProductName like @searchValue
      OR exists ( select 'x' from SearchList where p.UPC like '%' + SearchItem + '%')
      END
    END
GO
insert into Manufacturer Values(1,'Sony');
insert into Product Values(1,1,'Sony Monitor (Variable)','');
insert into Product Values(2,1,'Sony Walkman','32164578121');
insert into ProductVariation Values(1,1,'32" Colour','87154316458');
insert into ProductVariation Values(1,1,'48" Colour','87154316459');

exec p_SearchProduct 'Sony 87154316458';

你會用它來稱呼它

exec p_SearchProduct 'sony colour';
OR
exec p_SearchProduct 'sony 87154316458';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM