我正在尝试在共享相同列名的2个表上使用Inner join。 第一个表是临时表,但列名等于其他表主键列名。 如何在不更改列名称的情况下在它们之间进行连接(当然在临时表中)?
SELECT * FROM [dbo].[Apps]
INNER JOIN #statsForManagerApps on [Apps].[AppId] = #statsForManagerApps.AppId
WHERE AppId IN
(SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) AND [Enabled]=1
这就是我的加入的样子。使用*因为我需要Apps表中的所有数据。
答案 0 :(得分:1)
您应该使用表别名指定所有列,如下所示
SELECT A.col1,A.col2, TA.col1,TA.col2
FROM [dbo].[Apps] A
INNER JOIN #statsForManagerApps TA on A.AppId = TA.AppId
WHERE A.AppId IN (SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId)
AND A.Enabled=1
如果您真的不能使用表格名称(正如您所说的30列),请使用以下select
语句而不是上述语句:
SELECT *
或
SELECT A.*, TA.*
答案 1 :(得分:1)
您需要在WHERE
子句中指定表格:
WHERE Apps.AppId IN
您也可以对表进行别名,如下所示:
SELECT * FROM [dbo].[Apps] App
INNER JOIN #statsForManagerApps on App.AppId = #statsForManagerApps.AppId
WHERE App.AppId IN
(SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) AND [Enabled]=1
答案 2 :(得分:1)
您希望将表别名用于连接。这也将使查询更容易阅读:
SELECT a.*
FROM [dbo].[Apps] a INNER JOIN
#statsForManagerApps sfm
on [Apps].[AppId] = sfm.AppId
WHERE a.AppId IN (SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) AND
[Enabled]=1 ;
答案 3 :(得分:0)
尝试指定要使用的AppId列:
SELECT * FROM [dbo].[Apps]
INNER JOIN #statsForManagerApps
ON [Apps].[AppId] = #statsForManagerApps.AppId
WHERE [Apps].AppId IN
( SELECT [AppsForManagers].AppId FROM [AppsForManagers]
WHERE [Managerid] = @ManagerId
)
AND [Enabled]=1