doujiaozhan2413 2015-06-04 15:55
浏览 34
已采纳

PHP - 从不同的SQL数据库加入字段时出错

I am trying to build a query where I return results from 3 different tables as per the following:

Events Table DateTime, Direction, DeviceName

Tenants TenantName

Individuals FirstName, LastName

Initially I've returned fields from the first 2 tables with the following SQL:

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

I've joined both the Event and Tenants tables using the TenantId Field.

I then needed to also return the fields FirstName and LastName (from the Individuals table), so I tried using the sql below:

    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'

However this returned the following error:

The objects "InetDb.dbo.Tenants" and "InetDb.dbo.Tenants" in the FROM clause have the same exposed names. Use correlation names to distinguish them.

Can someone please guide me on how it's best to resolve this please ?

UPDATED

I've modified the syntax to the below:

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'

I then received the following error:

Msg 209, Level 16, State 1, Line 1 Ambiguous column name 'FirstName'. Msg 209, Level 16, State 1, Line 1 Ambiguous column name 'LastName'

  • 写回答

1条回答 默认 最新

  • dongtiao2066 2015-06-04 16:05
    关注

    You are missing Individuals table in INNER JOIN and use Tenants by mistake.

    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'
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题