基于布尔值的不同表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
你遗漏了一些重要的信息。我假设
可以在UserProductID上与Products
连接MainUser
可以与UserProductID上的产品
连接子用户
- 每个产品有一个主要用户。(很可能不会,但需要在您向我们提供更多信息后解决)
- 每个产品有一个子用户
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*
被认为是不好的做法<代码>选择*不应出现在生产代码中。在两个表上创建一个视图,并将其加入到您的程序中产品与主用户/子用户之间的关系是什么?