Sql server SQL Server查询不工作
我有一个表exec\u info,它有以下列: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 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