簡體   English   中英

在MSSQL中查詢鍵值對數據庫

[英]Querying on Key-Value pair database in MSSQL

我在MSSQL中有一個表位於metakey-value對上,如果提供了meta值,那么用於選擇所有不同的CustomerID的最佳功能是什么?

這是我當前的腳本。

DECLARE
    @name NVARCHAR(100) = 'Brian',
    @mobile NVARCHAR(100) = '0219002315'
SELECT cd.CustomerID FROM [dbo].[CustomerDetails] cd
 where (cd.MetaKey='First Name' AND cd.MetaValue=@name ) 
   or (cd.MetaKey='Mobile' AND cd.MetaValue=@mobile) 
group by cd.CustomerID
having count(*) = 2

因此,我要實現的目標是,如果我具有@name的值,那么我將獲得那些元值= @name的客戶,如果同時提供了@name和@mobile,那么我只會獲得那些能夠滿足這兩個要求的客戶。 目前,我的問題是,如果@mobile或@name為null,則不會得到任何值。

我的表格是[dbo]。[CustomerDetails]。 具有以下各列:CustomerDetailsID CustomerID MetaKey MetaValue

您正在使用COUNT(*)= 2的子句。因此,如果只有其中之一匹配,則不會得到任何行。 您需要刪除它。

DECLARE
    @name NVARCHAR(100) = 'Brian',
    @mobile NVARCHAR(100) = '0219002315'
SELECT cd.CustomerID FROM [dbo].[CustomerDetails] cd
 where (cd.MetaKey='First Name' AND cd.MetaValue=@name ) 
   or (cd.MetaKey='Mobile' AND cd.MetaValue=@mobile) 
group by cd.CustomerID

您是否希望更多的客戶擁有唯一的手機號碼和名字? 如果沒有,您可以使用以下方法

SELECT distinct cd.CustomerID 
FROM [dbo].[CustomerDetails] cd
where (cd.MetaKey='First Name' AND cd.MetaValue=@name ) 
   or (cd.MetaKey='Mobile' AND cd.MetaValue=@mobile) 

暫無
暫無

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

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