Я надеюсь, что вопрос достаточно ясен.
Вот мой запрос:
SELECT
'Total Complete' AS name, count(c.id) AS amnt
FROM
lanes AS c
LEFT JOIN leads AS l
ON ((c.carrier_mcn = l.authority_number
AND l.authority_type = 'mc')
OR c.carrier_mcn = l.mcn
OR c.carrier_mcn = CONCAT('MC', l.authority_number))
AND c.carrier_mcn <> 0
LEFT JOIN lanes_emails AS cem1
ON cem1.cid = c.id AND cem1.deleted = 0
LEFT JOIN lanes_emails AS cem2
ON cem1.cid = cem2.cid AND cem2.deleted = 0 AND cem2.id < cem1.id
LEFT JOIN lanes_equipment AS ceq1
ON ceq1.cid = c.id AND ceq1.deleted = 0
LEFT JOIN lanes_equipment AS ceq2
ON ceq1.cid = ceq2.cid AND ceq1.deleted = 0 AND ceq2.id < ceq1.id
LEFT JOIN lanes_service_area AS csa1
ON csa1.cid = c.id AND AND flag = 2 csa1.deleted = 0
LEFT JOIN lanes_service_area AS csa2
ON csa1.cid = csa2.cid AND AND flag = 2 csa1.deleted = 0 AND csa2.id < csa1.id
WHERE
c.carrier_mcn IS NOT NULL and c.carrier_mcn <> ''
AND c.broker_mcn IS NOT NULL and c.broker_mcn <> ''
AND c.fax IS NOT NULL and c.fax <> ''
AND cem2.id IS NOT NULL
AND ceq2.id IS NOT NULL
AND csa2.id IS NOT NULL
Теперь то, что я пытаюсь здесь сделать, это получить общее количество строк из «дорожек», где есть хотя бы одно электронное письмо, оборудование, зона обслуживания, номер MC или номер факса. Есть два номера MC, но они оба на одном столе; главная проблема в том, что может быть неограниченное количество адресов электронной почты, оборудования и зон обслуживания.
В данном случае я начал писать статью об этой проблеме и обнаружил еще одну похожую проблему:
MySQL: Могу ли я выполнить левое соединение и извлечь только одну строку из таблицы соединений?
Поэтому я попробовал это и внедрил в свой запрос. К сожалению, это не сработало так, как я планировал.
Это сработало бы нормально, если бы у меня было более одной строки; он получит правильный подсчет, игнорируя тот факт, что у меня было несколько электронных писем или что-то еще, но это НЕ сработало бы, если бы было только одно. Вместо этого он не дал никаких результатов.
Нет, я не могу использовать GROUP BY для получения нужных мне результатов; Я пробовал GROUP BY, мне нравится использовать его при возврате полных списков результатов, но если я пытаюсь вернуть счетчики, GROUP BY постоянно путает меня.
Есть ли способ заставить объединение в mysql вернуть только одну строку без использования подзапроса? Мне нужно только знать, есть ли один элемент из любой из этих других таблиц, мне не нужно возвращать все, и я не знаю, как запрограммировать его для работы через предложение WHERE.
Мне нужен этот запрос для гистограммы. На самом деле у меня есть несколько таких запросов; это тот, который требует всех результатов, но у меня есть другие без требований, по крайней мере, один адрес электронной почты, по крайней мере, один номер MC и т. д., но если я смогу заставить это работать, я могу заставить работать остальные.