我可以在不返回条件列的情况下进行左连接吗?

Posted

技术标签:

【中文标题】我可以在不返回条件列的情况下进行左连接吗?【英文标题】:Can I do a left join without returning the conditional columns? 【发布时间】:2016-12-17 05:59:47 【问题描述】:

SQL 新手,但我希望能够通过引入适量的数据来优化我的查询。我正在对 CS Rep Name 和 WE 进行左连接,它们是两个表中都存在的两列。我发现如果我没有在 TECDR 表中引入 CS Rep Name 和 WE,查询会出错。有解决方法吗?因为是左连接,所以不需要冗余数据。

SELECT *
FROM   Tish_Email_CSAT_Dump AS TECD
       LEFT JOIN (SELECT CS_Rep_Name,
                         Team_Leader,
                         Operations_Manager,
                         Tenure,
                         WE,
                         FileName
                  FROM   Tish_Email_CSAT_Dump_Roster) AS TECDR
         ON TECD.CS_Rep_Name = TECDR.CS_Rep_Name
            AND TECD.WE = TECDR.WE 

【问题讨论】:

don't bring in CS Rep Name and WE in the TECDR table 是什么意思?你真正想要的结果是什么? 不要使用select *。只选择您需要的列。 避免子查询,直接连接两个表。然后限制你真正需要的列替换select *的数据量 @vercelli - 派生表没有任何实际区别,除非可能更清楚。无论如何,它将根据基表解决。 mysql Select all columns from one table and some from another table的可能重复 【参考方案1】:

当您在查询中嵌入 SELECT 代替表时,选择(投影)的结果就像只在查询中可见的表。

在您的情况下,连接与您选择的列有一个名为TECDR 的表相同。因此,如果您从SELECT 中遗漏了Tish_Email_CSAT_Dump_Roster 的某些列,则这些列将无法加入或选择。

但是,在您的情况下,这是不必要的:您需要做的就是加入基础表,如下所示:

SELECT
    TECD.*
,   TECDR.Team_Leader
,   TECDR.Operations_Manager
,   TECDR.Tenure
,   TECDR.FileName
FROM Tish_Email_CSAT_Dump AS TECD
LEFT JOIN Tish_Email_CSAT_Dump_Roster AS TECDR
       ON TECD.CS_Rep_Name = TECDR.CS_Rep_Name AND TECD.WE = TECDR.WE

【讨论】:

@GordonLinoff 非常感谢您指出这一点!现在已修复。 这对我来说很有意义,并帮助我理解我做错了什么。谢谢你。我没有选择 *,而是进一步缩小了查询范围。【参考方案2】:
select 
  <place the columns you want here>
from 
  Tish_Email_CSAT_Dump as TECD
  Left join Tish_Email_CSAT_Dump_Roster as TECDR 
    On TECD.CS_Rep_Name = TECDR.CS_Rep_Name and TECD.WE = TECDR.WE

【讨论】:

【参考方案3】:

希望以下内容有所帮助,否则请分享错误的查询:

选择 TECD.Column1、TECD.Column2、TECDR.Column1、TECDR.Column2 从 Tish_Email_CSAT_Dump 作为 TECD 左加入 Tish_Email_CSAT_Dump_Roster 作为 TECDR 在 TECD.CS_Rep_Name = TECDR.CS_Rep_Name 和 TECD.WE = TECDR.WE

【讨论】:

以上是关于我可以在不返回条件列的情况下进行左连接吗?的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下,条件使用“内连接”而不是“左连接”方法使我的查询工作不是我计划的方式

在这种情况下我应该使用左连接吗?

啥是左外部联结?

左连接右连接交叉连接全外连接

按值加入两个熊猫系列[重复]

在pyspark中加入2个表,多个条件,左连接?