连接到表和字符串比较(大数据集)

r7xajy2e  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(308)

我对sql非常陌生,对自己正在做的事情不太了解。我想弄清楚如何得到一个潜在客户和拥有者的列表,他们对应的竞选记录类型被称为“inter”
到目前为止,我已经尝试连接两个表,并运行在另一个堆栈溢出页上发现的字符串比较。他们分开工作很好,但一起一切都打破了。。。我只得到一个错误“你的sql语法有错误;“检查手册”

select a.LeadId, b.OwnerId from
(select * from CampaignMember as a
join
select * from Campaign as b
on b.id = a.CampaignId)
where b.RecordTypeId like "inter%"

架构:

Campaign            CampaignMember
-------------       ----------------
Id                  CampaignId
OwnerId             LeadId
RecordTypeId       ContactId

字符串比较也非常慢。我正在看一个有6亿美元价值的表格。有没有更快的选择?
有没有一种方法可以在mysql中获得更具体的错误?

ahy6op9u

ahy6op9u1#

mysql通常很差,并且处理子选择,所以您应该尽可能避免使用它们。另外,您的子选择没有过滤任何行,因此它必须在应用 LIKE 过滤器。这有时是由查询引擎“智能”处理的,但是您应该尽量减少对引擎的依赖以优化查询。
另外,您真的应该只返回您关心的列; SELECT * 可以确认问题,但会减慢查询速度。
因此,eric(上图)发布的查询实际上是最佳选择。

zbdgwd5y

zbdgwd5y2#

试试这个:

select CampaignMember.LeadId, Campaign.OwnerId from
    Campaign
    inner join
    CampaignMember
    on CampaignMember.CampaignId= Campaign.id
    where Campaign.RecordTypeId like "inter%"
zf9nrax1

zf9nrax13#

如果你正确格式化你的代码,你会很容易明白为什么它不起作用。

select a.LeadId, b.OwnerId 
from (
    select * 
    from CampaignMember as a
    join select * 
        from Campaign as b on b.id = a.CampaignId
)
where b.RecordTypeId like "inter%"

这不是一个有效的 JOIN 格式。最后一部分,sql使用单引号 ' 而不是双引号 " 也许你想要的是这样的东西

SELECT a.LeadId, b.OwnwerId
FROM CampaignMember a
JOIN Campaign b ON b.id = a.CampaignId
WHERE b.RecordTypeId LIKE 'inter%'

相关问题