2017-05-25 71 views
0

我有SQL Server表和我應該創建一個查詢,在那裏將能夠基於單一的查詢參數/檢索條件輸入任意組合,以繪製出相同的數據是否有可能進行這樣的查詢

例如,用戶給出了一個型號爲我們在表1

如下我將創建一個查詢,搜索所有產品:

SELECT * 
FROM Products 
WHERE pModel = @pUserModel; 

下,其他用戶爲我們提供了一個然後我必須創建一個產品的描述她的查詢,如下所示:

SELECT * 
FROM Products 
WHERE pDescription = @pUserDescription; 

表1

Products (pNo, pModel, pDescription, pQty, pGlobalQty, pParent) 

我在這裏的問題是,與其是基於不同的參數創建了兩個查詢的,有沒有什麼方法來創建一個查詢,其中它能夠滿足這兩種不同用戶的搜索條件嗎?

+0

「模型」表的作用是什麼,因爲兩個查詢都不使用它。 – Utsav

+0

是真的,我會在這種情況下編輯出模型表。 – LKH

回答

0
declare @pUserModel varchar(50) 
declare @pUserDescription varchar(50) 

---如果你想用個人搜索參數進行搜索而不是試用這個。

if (@pUserModel <> '') 
begin 
    SELECT * FROM Products WHERE pModel = @pUserModel; 
end 
else if (@pUserDescription <> '') 
begin 
    SELECT * FROM Products WHERE pDescription = @pUserDescription; 
end 

---如果你想結合所有的搜索參數,試試這個。

SELECT * FROM Products WHERE LTRIM(RTRIM(pModel)) = @pUserModel or LTRIM(RTRIM(pDescription)) = @pUserDescription 
+0

感謝您的幫助。 – LKH

0

如果我正確地理解你的要求,你需要joinOR條件

select * from Products p 
left join Model m 
on p.pModel=m.mModel 
where (p.pModel = @pUserModel 
OR p.pDescription = @pUserDescription) 

LEFT JOIN返回從產品的記錄,即使沒有任何與之相關的模型。如果你不需要它,你可以將其更改爲INNER JOIN

+0

感謝您的幫助兄弟。 – LKH

0

你可以尋找參數字符串的長度修剪爲OR條件的一部分,並始終提供兩個參數,即使其中一個爲空字符串「」。喜歡的東西

SELECT 
     P.* 
    from 
     Products P 
    where 
      ( LEN(RTRIM(@pUserModel)) = 0 
      OR P.pModel = @pUserModel) 
     OR 
      ( LEN(RTRIM(@pUserDescription)) = 0 
      OR P.pDescription = @pUserDescription) 

如果查詢例如在pDescription =「」,它將如果描述列實際上有一個值失敗。所以如果TRIMMED參數的長度= 0,或者它與正在搜索的匹配,則通過將每個都包含在OR條件中來表示可以。如果你想在通配符搜索,一定要加「%」

爲了消除或預選賽,如果你的空參數都只是「%」,這將拉動的一切,對於相應的參數。所以你可以有一個模型='%'和描述='東西%'...或反之亦然...模型='某型號%'和說明='%'

我將產品表「P」來簡化可讀性。特別是如果你有多個表格,你應該總是確定一個表格/列來自哪裏,以便其他人提供幫助。

+0

感謝您的幫助。 – LKH

相關問題