SQL:别名列上的内部联接

时间:2020-03-06 14:32:05  来源:igfitidea点击:

以前,我曾要求从字段中剥离文本并将其转换为int,这成功完成了。但是现在,我想对这个新值做一个INNER JOIN。

所以我有这个:

SELECT CONVERT(int, SUBSTRING(accountingTab.id, PATINDEX('%[0-9]%', accountingTab.id), 999)) 
AS 'memId',  userDetails.title, userDetails.lname 
FROM accountingTab INNER JOIN
(SELECT id, title, first, last FROM memDetTab) AS userDetails ON memID = userDetails.id

然后我收到无效的列名memID错误。

我怎样才能解决这个问题?

解决方案

重复整个表达式,而不是memId。

如果必须执行此操作,则会遇到设计问题。如果可以,我建议我们需要重构表或者关系。

我们可以重复整个表达式,也可以反向加入:

SELECT *
FROM memDetTab
    JOIN (SELECT CONVERT(int, SUBSTRING(accountingTab.id, PATINDEX('%[0-9]%', accountingTab.id), 999)) AS 'memId', userDetails.title, userDetails.lname
FROM accountingTab) subquery
    ON subquery.memID = memDetTab.ID