我正试图建立一个查询,我从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表。
然后我还需要返回字段FirstName和LastName(从个人表),所以我尝试使用下面的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'