我有两个表 tblEsslAttendance 和 tblEnquiry 在tblDevicemember中生成111并且tblMember id生成JE-111,我想加入那个带有这个id base的两个表
我的表 tblEsslAttendance 是:
sed -r "/^>/R file2" file1 | sed -r "/>/d;/^[^#]/s/(.*)/> \1/"
我的表 tblEnquiry 是
EmpDeviceCode | EmpCode | LogDate
-----------------------------------
111 | 111 |2017-02-03
我尝试解决此问题,我的查询是:
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
答案 0 :(得分:2)
使用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()
重复表达,相同的查找表也很有用
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
答案 1 :(得分:1)
您不能在同一级别的查询中使用select
中的列别名 - 包括on
子句。
一种方法将逻辑放在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;