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

时间:2018-06-27 22:00:35

标签: mysql sql

我对SQL还是很陌生,对我在做什么并不了解很多。我试图弄清楚如何获取潜在客户和所有者的列表,这些潜在客户和所有者的相应广告系列记录类型表示为“内部”

到目前为止,我已经尝试连接两个表并运行在不同堆栈溢出页面上发现的字符串比较。它们分别工作正常,但一切都坏了……我只收到错误消息“您的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

字符串比较也很慢。我正在查看一个600M值的表。有更快的选择吗?

还有没有办法在MySQL中获得更具体的错误?

3 个答案:

答案 0 :(得分:1)

如果您正确设置了代码格式,那么很容易看到为什么它不起作用。

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%'

答案 1 :(得分:0)

尝试一下:

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

答案 2 :(得分:0)

MySql通常很差并且可以处理子选择,因此应尽可能避免使用它们。另外,您的子选择不会过滤任何行,因此它必须在应用LIKE过滤器之前评估每一行。有时,查询引擎会“智能地”处理该问题,但是您应该尽量减少对引擎的依赖以优化查询。

此外,您实际上只应该返回您关心的列; SELECT *可以确认,但会降低查询速度。

因此,由埃里克(Eric)发布的查询(上面)实际上是最佳选择。