如果连接表中不存在连接ID,如何显示连接表中的数据?

时间:2013-04-30 08:40:02

标签: sql-server

我有以下表格及相应的数据:

RequestsTable
ReqID | ReqBy | ReqDate
1 | User1 | 30/04/2013
2 | User2 | 30/04/2013
3 | MasterUser | 30/04/2013

RequestorsTable
ReqUserName | ReqFullName
User1 | Sample User 1
User2 | Sample User 2

我需要输出如下:

ReqID | ReqBy | ReqDate
1 | Sample User 1 | 30/04/2013
2 | Sample User 2 | 30/04/2013
3 | MasterUser | 30/04/2013

我可以知道怎么办^^?

快速说明:MasterUser是一个超级用户帐户,因此不在数据库中,但可以提出请求。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

使用ISNULLLEFT OUTER JOIN可以选择性地选择要在结果集中返回的列。

  • 如果在RequestorsTable中找到匹配的记录,请使用该值
  • 否则,请使用RequestsTable的ReqBy值

示例选择语句

SELECT rt.ReqID, ISNULL(rst.ReqFullName, rt.ReqBy), rt.ReqDate
FROM   RequestsTable rt
       LEFT OUTER JOIN RequestorsTable rst ON rst.ReqUserName = rt.ReqBy

ISNULL的替代方案是COALESCEmore or les执行类似的功能。

示例选择语句

SELECT rt.ReqID, COALESCE(rst.ReqFullName, rt.ReqBy), rt.ReqDate
FROM   RequestsTable rt
       LEFT OUTER JOIN RequestorsTable rst ON rst.ReqUserName = rt.ReqBy

答案 1 :(得分:1)

试试这个 -

SELECT 
      rt.ReqID
    , ReqBy = ISNULL(rt2.ReqFullName, rt.ReqBy)
    , rt.ReqDate  
FROM dbo.RequestsTable rt
LEFT JOIN dbo.RequestorsTable rt2 ON rt.ReqBy = rt2.ReqUserName