Reputation: 839
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'
Upvotes: 0
Views: 48
Reputation: 8497
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'
Upvotes: 1