2

我正在尝试在共享相同列名的 2 个表上使用内连接。第一个表是临时表,但列名等于其他表主键列名。如何在不更改列名的情况下加入它们(当然是在临时表中)?

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 表中的所有数据。

4

4 回答 4

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.*
于 2013-09-11T13:23:23.113 回答
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 
于 2013-09-11T13:23:26.720 回答
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 ;
于 2013-09-11T13:24:28.390 回答
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 
于 2013-09-11T13:23:48.253 回答