Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于布尔值的不同表sql选择_Sql_Sql Server_Tsql - Fatal编程技术网

基于布尔值的不同表sql选择

基于布尔值的不同表sql选择,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个简单的存储过程,如下所示: ALTER PROCEDURE [dbo].[spList_Report] @id INT AS SET NOCOUNT ON SELECT * FROM tblProducts as products WHERE product.intID = @id 我有两个用户表:MainUser和SubUser 两个表都有一个外键列productID,它与产品表intID的主键intID相关。它们都有一个

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

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


AS 
  SET NOCOUNT ON 

  SELECT * 
  FROM 
    tblProducts as products 
  WHERE  
    product.intID = @id  
我有两个用户表:MainUser和SubUser 两个表都有一个外键列productID,它与产品表intID的主键intID相关。它们都有一个列电子邮件地址。产品表还有一个bit列isMainUser

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

例如,我只需要一个emailAddress列:

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


AS 
  SET NOCOUNT ON 

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

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

  • Products
    可以在UserProductID上与
    MainUser
    连接
  • 产品
    可以与UserProductID上的
    子用户
    连接
  • 每个产品有一个主要用户。(很可能不会,但需要在您向我们提供更多信息后解决)
  • 每个产品有一个子用户
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*
被认为是不好的做法<代码>选择*不应出现在生产代码中。

在两个表上创建一个视图,并将其加入到您的程序中

产品与主用户/子用户之间的关系是什么?