【发布时间】:2019-02-13 04:01:36
【问题描述】:
我必须在存储过程中选择如下查询。
SELECT @licenseCount = COUNT(*) FROM ServicePool SP
INNER JOIN UserPackages UP ON UP.ServicePoolId = SP.Id
AND SP.UserId = UP.UserId
INNER JOIN Package P ON P.Id = UP.PackageId
LEFT OUTER JOIN CompanyProfile C ON C.LicenseId = SP.Id
INNER JOIN CompanyProfile CP ON CP.CurrencyId = P.CurrencyId
INNER JOIN PackageCategory PC ON PC.OrganizationTypeId = CP.OrganisationType
AND PC.PackageId = P.Id
WHERE SP.Active = 1
AND SP.UserId = @uId
AND P.Active = 1
and CP.CompanyID = @cId
and ISNULL(C.CompanyID,0) = 0
AND DATEDIFF(DAY,GETDATE(),DATEADD(DAY,P.ValidityPeriod,UP.PurchaseDate)) > 0
SELECT @paymentCount = COUNT(*) FROM ServicePool SP
INNER JOIN UserPackages UP ON UP.ServicePoolId=SP.Id
AND SP.UserId = UP.UserId
INNER JOIN Package P ON P.Id = UP.PackageId
LEFT OUTER JOIN CompanyProfile C ON C.LicenseId = SP.Id
INNER JOIN CompanyProfile CP ON CP.CurrencyId = P.CurrencyId
INNER JOIN PackageCategory PC ON PC.OrganizationTypeId = CP.OrganisationType
AND PC.PackageId = P.Id
WHERE SP.Active = 1
AND SP.UserId = @uId
AND P.Active = 1
and CP.CompanyID = @cId
and ISNULL(C.CompanyID,0) = 0
AND DATEDIFF(DAY,GETDATE(),DATEADD(DAY,P.ValidityPeriod,UP.PurchaseDate)) > 0
AND UP.PaymentStatus = 'P'
如您所见,上述两个选择查询之间的唯一区别是,在第二个查询的末尾,有一个额外的 where 条件,AND UP.PaymentStatus = 'P'。
所以我想知道有什么方法可以简化这些查询吗?
【问题讨论】:
-
“简化”是什么意思?你也会有重复的数据......为什么第一个没有:
AND UP.PaymentStatus <> 'P' -
UP.PaymentStatus可以是W or P,在任何一种情况下都需要在第一个条件下取值,只有在UP.PaymentStatus = P时才能在第二个条件下取值
标签: mysql sql stored-procedures