基于行值MSSQL的条件内部联接

拉米兰布金

我有一个用于消息的MSSQL表。我有客户,工作人员和用户,每个人都有各自的表。对于此消息传递组件,可以将消息发送给客户端工作人员或用户。为了区分发送者/接收者是哪种类型,我在消息表中有一列是tiny-int,用户为1,客户端为2,工作者为3。

因此,当我尝试接收消息时,什么是从相应表(客户端,用户或工作人员)中检索发件人名称的理想方法,而无需进行多次查询。

我知道我可以先执行查询以检查类型列,然后执行另一个查询以获取名称,但是我不希望这样做是为了解决性能问题。

拉文达斯基

您可以创建一个通用视图,该视图仅列出每种消息的相关列以及消息类型,然后从您的消息表中加入该列。

CREATE VIEW ExampleView
AS
begin
    SELECT 
        firstname,
        lastname,
        1 AS MessageType
    FROM 
    dbo.Users
    union ALL
    SELECT 
        firstname,
        lastname,
        2 AS MessageType
    FROM 
    dbo.Clients
    union ALL
    SELECT 
        firstname,
        lastname,
        3 AS MessageType
    FROM 
    dbo.Workers
END

询问:

SELECT 
     a.MessageText,
     isnull(b.Firstname,'')+ISNULL(b.lastname,'') AS Name
FROM Messaging a
INNER JOIN ExampleView b ON a.MessageType = b.MessageType

如果空间不是一个大问题,则可以将消息类型直接存储在Users,Clients和Workers表上,然后直接加入该列...更好的性能,但实际上并不是很好的数据库设计。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章