Присоединение к таблицам и сравнение строк (большой набор данных) - PullRequest
0 голосов
/ 28 июня 2018

Я очень плохо знаком с 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

Сравнение строк также очень медленное. Я смотрю на таблицу 600M значений. Есть ли более быстрая альтернатива?

Есть ли способ получить более конкретные ошибки в MySQL?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Если вы правильно отформатируете свой код, будет очень легко понять, почему он не работает.

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%'
0 голосов
/ 28 июня 2018

MySql, как правило, довольно плох и обрабатывает подвыборы, поэтому вы должны избегать их, когда это возможно. Кроме того, ваш подчиненный выбор не фильтрует строки, поэтому он должен оценить каждую строку перед применением фильтра LIKE. Иногда это «интеллектуально» обрабатывается механизмом запросов, но вы должны попытаться свести к минимуму зависимость от механизма для оптимизации запроса.

Кроме того, вы действительно должны возвращать только те столбцы, которые вам нужны; SELECT * хорошо для подтверждения, но замедляет запросы.

Таким образом, запрос Эрика (см. Выше) на самом деле является лучшим выбором.

0 голосов
/ 28 июня 2018

Попробуйте это:

  select CampaignMember.LeadId, Campaign.OwnerId from
    Campaign
    inner join
    CampaignMember
    on CampaignMember.CampaignId= Campaign.id
    where Campaign.RecordTypeId like "inter%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...