распечатать все повторяющиеся строки - PullRequest
1 голос
/ 20 октября 2011

Теперь у меня есть следующий запрос, который дает мне COUNT () строк с одинаковыми именами. Однако, скажем, я просто хотел распечатать все строки.

SELECT l.id, c.first_name, c.last_name, 
    l.source AS 'affiliateId', COUNT(*), 
    c.email, ls.create_date, ls.buyer 
  FROM lead_status AS ls 
    INNER JOIN leads AS l ON l.id = ls.lead_id 
    INNER JOIN contacts AS c ON c.lead_id = l.id 
  WHERE ls.discriminator = 'AUTO_POST' AND l.affiliate_id=1003 
    AND ls.winner =1 AND l.test =0 
    AND l.create_date BETWEEN '2011-10-03' AND '2011-10-19'
  GROUP BY c.first_name, c.last_name HAVING COUNT(*)>1;

Итак, я пытаюсь перейти от:

joe   smith   3
lisa  martin  2

К следующему:

joe smith   
joe smith
joe smith
lisa martin
lisa martin

Помощь!

Ответы [ 5 ]

3 голосов
/ 20 октября 2011

Вы можете присоединиться к таблице чисел:

SELECT T1.col1, T2.col2
FROM
(
   -- your long query goes here
) T1
JOIN numbers
ON numbers.x <= T1.cnt

Таблица чисел - это просто таблица, содержащая числа:

+---+
| x |
+---+
| 1 |
| 2 |
| 3 |
etc... as many numbers as you will ever need
2 голосов
/ 20 октября 2011

вы можете использовать выражение COUNT(DISTINCT first_name), а затем избавиться от GROUP BY

поэтому запрос будет

SELECT l.id, c.first_name, c.last_name, l.source AS 'affiliateId', COUNT(DISTINCT c.first_name, c.last_name) as CountRows, 
c.email, ls.create_date, ls.buyer FROM lead_status AS ls 
INNER JOIN leads AS l ON l.id = ls.lead_id 
INNER JOIN contacts AS c ON c.lead_id = l.id 
WHERE ls.discriminator = 'AUTO_POST' AND l.affiliate_id=1003 
AND ls.winner =1 AND l.test =0 AND l.create_date BETWEEN '2011-10-03' AND '2011-10-19'
HAVING CountRows>1
1 голос
/ 20 октября 2011

Добавьте еще одно объединение в таблицы, где появляется дублирование. Для условия соединения сделайте так, чтобы идентифицирующая информация была одинаковой (например, c.first_name = c2.first_name AND c.last_name = c2.last_name или l.id = c2.id), а все различающиеся записи будут разными (например, l.create_date < l2.create_date). Наконец, сгруппируйте по идентификатору записи, которая содержит дубликаты, или выберите отдельные строки, чтобы вы не получали повторов. Не зная схемы таблицы или того, где могут возникнуть дубликаты, я не могу быть более конкретным.

1 голос
/ 20 октября 2011

Не помню, поддерживает ли MySQL подзапросы, но я бы сделал что-то вроде

select
    first, last 
from
    table where id in (select id from table group by first, last having count(*) > 1)
order by
    first, last
0 голосов
/ 20 октября 2011

объединить набор результатов обратно со списком контактов в полях имени и фамилии (при условии, что имя + фамилия образуют уникальный ключ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...