使用别名形成内部联接

时间:2015-06-14 15:35:42

标签: mysql

我有一个问题,我无法弄清楚,并在这里看了谷歌和类似的问题,但他们只是不太一样。

我正在尝试构建一个MySQL查询,它有两个部分,第一部分很简单,我做得很好,因为它使用现有的关系,请参阅...

SELECT

clientsites.SiteName,
clients.ClientName,
pafaddresses.PostTown,
pafaddresses.PostCode,
CONCAT("XXXXXXX", Replace(UPPER(pafaddresses.PostCode),' ','')) AS JouneyKeytemp,
clientsites.SiteType
FROM clientsites
INNER JOIN clients ON clientsites.ClientFk = clients.ClientPk
INNER JOIN pafaddresses ON clients.ActualPAF = pafaddresses.id

您将从此代码中看到生成了一个别名,它会连接两个邮政编码,看起来像xxxxxxxyyyyyy,这确实有效,但出于显而易见的原因,我删除了实际的邮政编码。

我现在要做的是从一个名为Journeys的无关表中引入两个字段:

SELECT
    JourneyKey,
    SingleDistance,
    SingleTime
FROM journeys 

我想引入SingleDistance和SingleTime,其中Journey Key = JourneyKeyTemp的生成别名。

我尝试添加以下内容:

INNER JOIN journeys ON JouneyKeytemp = journeys.JourneyKey

但我只是不断收到语法错误。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在连接谓词中重复表达式:

INNER JOIN journeys
 ON CONCAT("XXXXXXX", Replace(UPPER(pafaddresses.PostCode),' ','')) = journeys.JourneyKey

或者您可以创建子查询:

select * from(

SELECT

clientsites.SiteName,
clients.ClientName,
pafaddresses.PostTown,
pafaddresses.PostCode,
CONCAT("XXXXXXX", Replace(UPPER(pafaddresses.PostCode),' ','')) AS JouneyKeytemp,
clientsites.SiteType
FROM clientsites
INNER JOIN clients ON clientsites.ClientFk = clients.ClientPk
INNER JOIN pafaddresses ON clients.ActualPAF = pafaddresses.id)t

INNER JOIN journeys ON t.JouneyKeytemp = journeys.JourneyKey