我可以在不返回条件列的情况下进行左连接吗?
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
【讨论】:
以上是关于我可以在不返回条件列的情况下进行左连接吗?的主要内容,如果未能解决你的问题,请参考以下文章