2015-06-14 49 views
0

我有一个问题,我无法弄清楚,并在这里查看了谷歌和类似的问题,但他们只是不完全相同。使用别名形成内部联接

我试图建立一个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,这确实有效,但显而易见的原因是我删除了实际的邮政编码。

我现在该怎么做是在两个领域带来从一个不相关的表称为旅程:

SELECT 
    JourneyKey, 
    SingleDistance, 
    SingleTime 
FROM journeys 

我想在SingleDistance和SingleTime,把其中的关键之旅产生=的JourneyKeyTemp别名。

我已经尝试添加以下内容:

INNER JOIN journeys ON JouneyKeytemp = journeys.JourneyKey 

但我只是不断得到一个语法错误。

任何帮助,将不胜感激。

回答

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 
+0

我发誓,我试过,之前并没有工作,没有现在这么感谢。顺便说一句,我如何让它做一个正确的内部联接,因为没有总是在旅程表上的条目,所以要显示所有客户端,只有从旅程匹配 –

+0

左加入旅程 –