PHP -连接来自不同SQL数据库的字段时出错


PHP - error when joining fields from different SQL databases

我正试图建立一个查询,我从3个不同的表返回结果,按如下所示:

事件表 DateTime, Direction, DeviceName

租户

TenantName

individual FirstName, LastName

最初,我用以下SQL从前2个表返回字段:

SELECT EventTime, DeviceName, Comment, TenantName
FROM taclogdata.dbo.Event 
     INNER JOIN InetDb.dbo.Tenants 
       ON taclogdata.dbo.Event.Tenant = InetDb.dbo.Tenants.TenantId
WHERE taclogdata.dbo.Event.EventTime 
       BETWEEN '01/04/2014 16:00:00' AND '01/04/2014 16:00:59

我已经使用TenantId字段连接了Event和Tenants表。

然后我还需要返回字段FirstNameLastName(从个人表),所以我尝试使用下面的sql:

    SELECT EventTime, DeviceName, Comment, TenantName, FirstName, LastName 
    FROM taclogdata.dbo.Event 
    INNER JOIN InetDb.dbo.Tenants 
       ON taclogdata.dbo.Event.Tenant = InetDb.dbo.Tenants.TenantId
    INNER JOIN InetDb.dbo.Tenants
       ON inet.dbo.Tenants.TenantId = inet.dbo.Individuals.TenantNdx
    WHERE taclogdata.dbo.Event.EventTime 
          BETWEEN '01/04/2014 16:00:00' AND '01/04/2014 16:00:59'

但是这会返回以下错误:

对象"InetDb.dbo。租户"answers"InetDb.dbo"。租户"在FROM子句具有相同的公开名称。使用关联名称区分。

有人能告诉我如何最好地解决这个问题吗?

我将语法修改如下:

SELECT EventTime, DeviceName, Comment, TenantName, FirstName, LastName 
FROM taclogdata.dbo.Event 
INNER JOIN InetDb.dbo.Tenants 
    ON taclogdata.dbo.Event.Tenant = InetDb.dbo.Tenants.TenantId
INNER JOIN InetDb.dbo.Individuals
    ON  InetDb.dbo.Tenants.TenantId = InetDb.dbo.Individuals.TenantNdx
WHERE taclogdata.dbo.Event.EventTime 
      BETWEEN '01/04/2014 16:00:00' AND '01/04/2014 16:00:59'

然后收到以下错误:

Msg 209, Level 16, State 1, Line 1,列名"FirstName"不明确。Msg 209,第16层,状态1,第1行,列名称"LastName"不明确

您在INNER JOIN中缺少Individuals表,而错误地使用了Tenants

SELECT EventTime, DeviceName, Comment, TenantName,        
       InetDb.dbo.Individuals.FirstName, InetDb.dbo.Individuals.LastName 
FROM taclogdata.dbo.Event 
INNER JOIN InetDb.dbo.Tenants 
    ON taclogdata.dbo.Event.Tenant = InetDb.dbo.Tenants.TenantId
INNER JOIN InetDb.dbo.Individuals
    ON  InetDb.dbo.Tenants.TenantId = InetDb.dbo.Individuals.TenantNdx
WHERE taclogdata.dbo.Event.EventTime 
       BETWEEN '01/04/2014 16:00:00' AND '01/04/2014 16:00:59'