sql根据boolean从不同的表中选择

时间:2010-07-06 12:33:29

标签: sql sql-server tsql

我有一个简单的存储过程,如下所示:

ALTER PROCEDURE [dbo].[spList_Report] 
  @id INT


AS 
  SET NOCOUNT ON 

  SELECT * 
  FROM 
    tblProducts as products 
  WHERE  
    product.intID = @id  

我有2个用户表:MainUser和SubUser 两个表都有一个外键列productID,它与产品表intID的主键intID相关。他们都有一个列emailAddress。产品表还有一个位列isMainUser。

如何根据isMainUser值更新存储过程以返回列emailAddress?因此,如果值为true,则从MainUser表中选择电子邮件地址,如果为false,则从SubUser表中选择emailAddress。

例如,我想要的只是一个emailAddress列:

ALTER PROCEDURE [dbo].[spList_Report] 
  @id INT


AS 
  SET NOCOUNT ON 

  SELECT 
    products.* 
  , myUser.emailAddress
  FROM 
    tblProducts as products 
  WHERE  
    product.intID = @id  

2 个答案:

答案 0 :(得分:3)

您遗漏了一些重要信息。我假设

  • Products可以与UserProductID
  • 上的MainUser结合使用
  • Products可以与UserProductID
  • 上的SubUser结合使用
  • 每个产品有1个主要用户。 (很可能不会,但是当您向我们提供更多信息时需要解决这些问题)
  • 每种产品都有1个子用户。

SQL声明

  SELECT  products.*  
          , CASE WHEN isMainUser=1 
            THEN MainUser.emailAddress 
            ELSE SubUser.emailAddress 
            END
  FROM    tblProducts as products  
          LEFT OUTER JOIN MainUser mu ON mu.UserProductID = products.UserProductID
          LEFT OUTER JOIN SubUser su ON su.UserProductID = products.UserProductID      
  WHERE   product.intID = @id   

请注意,使用SELECT *被视为不良做法。 SELECT *永远不应出现在生产代码中。

答案 1 :(得分:0)

在两个表上创建一个视图并加入到proc

中的表