Sql server SQL Server查询不工作

Sql server SQL Server查询不工作,sql-server,database,Sql Server,Database,我有一个表exec\u info,它有以下列:exec\u name、exec\u regID、exec\u contact、approved\u by、updated\u by\u user\u id [注:批准人和更新人(用户id都有执行机构] 我需要一个查询来从表中获取所有记录,以及根据approved_by(如果存在)获取exec_名称,根据Update_by_user_id(如果存在)获取exec_名称。 我试过这个,但对我不起作用 SELECT e.exec_name, e.

我有一个表exec\u info,它有以下列:
exec\u name、exec\u regID、exec\u contact、approved\u by、updated\u by\u user\u id

[注:
批准人
更新人(用户id
都有
执行机构
]

我需要一个查询来从表中获取所有记录,以及根据approved_by(如果存在)获取exec_名称,根据Update_by_user_id(如果存在)获取exec_名称。 我试过这个,但对我不起作用

SELECT e.exec_name, 
   e.exec_regid, 
   e.exec_contact, 
   e.approved_by, 
   a.exec_name AS ApprovedUser, 
   e.updated_by_user_id, 
   i.exec_name AS UpdatedUser 
FROM exec_info AS e, 
   exec_info AS a, 
   exec_info AS i 
WHERE  e.approved_by = a.exec_regid 
   AND e.updated_by_user_id = i.exec_regid 
例如,我有一些数据。现在,我只想显示相同的数据,因为它唯一的区别是,
approved\u by
updated\u by\u user\u id
替换为这些名称

exec_name              exec_regID    exec_contact   approved_by    updated_by_user_id 
Ali Khan              FA13-BSE-001    4534543       FA13-BSE-001       FA13-BSE-001
Tahir Khan            FA12-BSE-005    3564564       FA13-BSE-001
Hassan Abdullah       SP13-BEE-020    23423234      FA12-BSE-005
Abdul Rehman          FA15-BCC-033    34564566      FA13-BSE-001       FA13-BSE-001

请使用正确的连接语法,我添加了示例数据,以表明如果用户批准和更新的id都具有exec regID,则它必须能够正常工作:

输出:

exec_name   exec_regid      exec_contact    approved_by     ApprovedUser    updated_by_user_id  UpdatedUser
Rana        FA13-BSE001     03126006114     NULL            NULL            FA13-BSE001         Rana
Tahir       SP14-BCS-197    234             FA13-BSE001     Rana            1                   NULL
Hassan      SP14-BEE-76                     SP14-BCS-197    Tahir           FA13-BSE001         Rana
Abdul       SP15-BSE-002    033331212122    SP14-BCS-197    Tahir           NULL                NULL
使用外部应用程序

SELECT e.exec_name, 
       e.exec_regid, 
       e.exec_contact, 
       e.approved_by, 
       ApprovedUserTable.ApprovedUser, 
       e.updated_by_user_id, 
       UpdatedUserTable.UpdatedUser 
FROM exec_info AS e
OUTER APPLY(
         SELECT a.exec_name AS ApprovedUser
         FROM exec_info AS a
         WHERE e.approved_by = a.exec_regid 
)ApprovedUserTable
OUTER APPLY(
         SELECT i.exec_name AS UpdatedUser 
         FROM exec_info AS i
         WHERE e.updated_by_user_id = i.exec_regid  
)UpdatedUserTable

首先,您使用的是哪个版本的sql server?您可以包含该项的标记。第二:请不要使用。您不会从表tblrole获取任何数据。为什么在sql中使用“tblrole as r”?你为什么把执行信息写成e,写成我?不能得到你想要的。您想要所有exec_name!=批准人和执行人姓名!=由用户id更新?以及
tblrole
表如何与其他表链接?以何种方式不起作用?@NickyvV我正在使用sql server 2012。我觉得这些连接比内部连接更容易理解,这就是我使用这些连接的原因。然后,
approved\u by
updated\u by\u user\u id
列与
exec\u regid
之间没有连接。我添加了一个数据示例,以表明查询必须工作。请添加数据示例。这三列是同一表exec_info的列。其中,
approved\u by
updated\u by\u user\u id
具有exec\ucode>regID,用于跟踪。要知道谁更新了记录,谁批准了该员工。请给出一些数据示例,以及您需要从该示例中获得的输出。我在上面的问题中添加了一个带有数据的表格屏幕截图。请回顾一下。
SELECT e.exec_name, 
       e.exec_regid, 
       e.exec_contact, 
       e.approved_by, 
       ApprovedUserTable.ApprovedUser, 
       e.updated_by_user_id, 
       UpdatedUserTable.UpdatedUser 
FROM exec_info AS e
OUTER APPLY(
         SELECT a.exec_name AS ApprovedUser
         FROM exec_info AS a
         WHERE e.approved_by = a.exec_regid 
)ApprovedUserTable
OUTER APPLY(
         SELECT i.exec_name AS UpdatedUser 
         FROM exec_info AS i
         WHERE e.updated_by_user_id = i.exec_regid  
)UpdatedUserTable