在存储过程中使用JOINS从表中选择操作

时间:2016-11-15 15:59:27

标签: sql-server stored-procedures

我有三个名为financetrail,fooperson和idDog的sql表。所有这些表都有idFoo列:

我创建了以下存储过程

CREATE PROCEDURE [dbo].[getCustomerFinance] @idFinanceType INT 
AS
BEGIN
SELECT idCustomer
FROM financetrail
where idFinanceType = @idFinanceType ;
END

GO

所以我可以动态选择某种财务类型的客户。

上述过程沿着这些行生成一个表:

getCustomerFinance Stored Procedure result table

我也有这个查询

SELECT firstName , lastName
FROM IdDog RIGHT JOIN fooPerson 
ON IdDog.idFoo = fooPerson.idFoo WHERE IdDog.idIdDog IS NULL;

结果给了我所有在狗桌上没有狗的顾客。

我想做什么?

我想创建一个存储过程,它会给我所有没有有效idCard(上面的查询)并且具有从上面的存储过程定义的某种riskType的客户。

我尝试了什么?

我尝试过以下操作:

ALTER PROCEDURE [dbo].[getMissingDogs] 
AS
BEGIN

DECLARE @financeFilterTable table ( idCustomer INT)
INSERT INTO @financeFilterTable
EXEC getCustomerRisk 3
SELECT * FROM @financeFilterTable

SELECT firstName , lastName
FROM IdCard RIGHT JOIN FooPerson 
ON IdCard.idCustomer = FooPerson.idFoo WHERE IdDog.idIdDog IS       NULL;
END

我得到以下结果:

getMissingDogs result table

在当前结果集中,我有两个表。一个表为特定风险类型的客户提供客户ID,第二个表为没有idCard的客户提供。

我想在一个表中找到满足这两个条件(具有特定风险类型但没有idCard)的所有客户 这可能吗?

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您的要求。是否可以发布一些样本数据和预期的查询结果?

下面存储的程序可能适合您吗?

ALTER PROCEDURE [dbo].[getMissingDogs] 
@idFinanceType INT
AS
BEGIN

DECLARE @financeFilterTable table ( idCustomer INT)
INSERT INTO @financeFilterTable
EXEC getCustomerRisk @idFinanceType

SELECT firstName , lastName
FROM IdCard RIGHT JOIN FooPerson ON IdCard.idCustomer = FooPerson.idFoo
INNER JOIN @financeFilterTable AS RiskType ON RiskType.idCustomer = IdCard.idCustomer
WHERE IdDog.idIdDog IS       NULL;
END