我在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 客户ID 元密钥 MetaValue
答案 0 :(得分:0)
您正在使用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
答案 1 :(得分:0)
您希望更多的客户使用唯一的手机号码和名字吗? 如果没有,您可以使用以下方法
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)