Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除id前缀的Sql内部联接_Sql_Sql Server - Fatal编程技术网

删除id前缀的Sql内部联接

删除id前缀的Sql内部联接,sql,sql-server,Sql,Sql Server,在tblDevicemember id generate 111和tblMember id generate JE-111中,我有两个表TBlessLatenance和tblEnquiry,我想用这个id基连接这两个表 我的表格t LessLatenance为: EmpDeviceCode | EmpCode | LogDate ----------------------------------- 111 | 111 |2017-02-03 我的桌子tblE

在tblDevicemember id generate 111和tblMember id generate JE-111中,我有两个表TBlessLatenancetblEnquiry,我想用这个id基连接这两个表

我的表格t LessLatenance为:

 EmpDeviceCode | EmpCode | LogDate
 -----------------------------------
 111           |   111   |2017-02-03
我的桌子tblEnquiry

EnquiryID | FirstName | Gender
   -----------------------------
JE-111    |   AAAA    | Male
我试图解决这个问题,我的问题是:

SELECT l.EmpDeviceCode,(RIGHT(ah.EnquiryID, LEN(ah.EnquiryID) - 3)) 
AS tempnewId, 
ah.*  FROM tblEnquiry ah INNER JOIN tblEsslAttendance 
l ON l.EmpCode = ah.tempnewId 
你能帮我吗

我想要这样的输出:

EmpDeviceCode | EmpCode | LogDate  |EnquiryID |FirstName | Gender
------------------------------------------------------------------
111           |   111   |2017-02-03|JE-111    | AAAAA    | Male

不能在同一级别的查询中使用
select
中的列别名,包括
on
子句

一种方法将逻辑放在上的
中:

SELECT l.EmpDeviceCode,
       (RIGHT(ah.EnquiryID, LEN(ah.EnquiryID) - 3)) AS tempnewId, 
       ah.* 
FROM tblEnquiry ah INNER JOIN
     tblEsslAttendance l
     ON l.EmpCode = (RIGHT(ah.EnquiryID, LEN(ah.EnquiryID) - 3));
如果不想重复表达式,可以使用子查询、CTE或横向联接:

SELECT l.EmpDeviceCode, v.tempnewId, 
       ah.* 
FROM tblEsslAttendance l CROSS APPLY
     (VALUES (RIGHT(ah.EnquiryID, LEN(ah.EnquiryID) - 3) ) v(tempnewId)
     tblEnquiry ah 
     ON l.EmpCode = v.tempnewid;
使用
substring()
charindex()
函数仅获取id

SELECT * FROM tblDeviceMember d
INNER JOIN tblMember m ON 
      substring(m.EnquiryID, charindex('-', m.EnquiryID)+1, len(m.EnquiryID)) = d.EmpCode 
如果您不想通过
SUBSTRING()


你的设计在这里看起来不是特别好。如果您的
inquiryID
应该以这种方式链接到
EmpCode
,那么
tblEnquiry中可能会有一个
EmpCode
作为外键
SELECT * FROM (
      SELECT *,
              substring(m.EnquiryID, charindex('-', m.EnquiryID)+1, len(m.EnquiryID)) Id
      FROM tblMember 
) m INNER JOIN tblDeviceMember d ON d.EmpCode = m.Id