特定列上的SQL内部联接

时间:2013-09-11 13:21:15

标签: sql join

我正在尝试在共享相同列名的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表中的所有数据。

4 个答案:

答案 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