特定列上的SQL内部联接

栏目: mysql · 发布时间: 2021-03-29

简介  这篇文章主要介绍了特定列上的SQL内部联接以及相关的经验技巧,文章约1974字,浏览量287,点赞数1,值得参考!

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

答案

您需要在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 
另一答案

您希望使用表别名进行连接。这也将使查询更容易阅读:

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 ;
另一答案

您应该使用表别名指定所有列,如下所示

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.*
另一答案

尝试指定要使用的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 

以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

如何将不符合WHERE条件的联接表中的数据包含为空值(SQL)

SQL联接 外联接 内联接 完全联接 交叉联接(示例代码)

SQL Server-外部联接基础回顾(十三)(示例代码)

联接表并获取特定记录的计数

外部连接的位置vs ON

内部联接(获取与两个表匹配的所有信息)

Redis内部联接(示例代码)

java 联接mysql示例程序