Задавайте вопросы, мы ответим
Вы не зашли.
Запрос выдает ошибку:
Ошибка в запросe (1241): Operand should contain 1 column(s)
SELECT * FROM testtable WHERE Phone IN ( SELECT COUNT(*), Phone FROM testtable GROUP BY Phone HAVING COUNT(*) > 5)
Подскажите пожалуйста что делаю не так?
Цель - получить все значения строк в которых один и тот же телефон повторяется более 5 раз
Неактивен
COUNT(*), Phone - 2 колонки, а должна быть только 1.
для вашей задачи подзапрос не нужен
Неактивен
Да спасибо.
Но теперь проблема с обновлением аналогичных дублирующих строк.
UPDATE testtable SET Status = 'VIP' WHERE Phone IN (SELECT Phone FROM testtable WHERE Status = 'VIP' GROUP BY Phone)
Ругается: Ошибка в запросe (1093): You can't specify target table 'avitoads' for update in FROM clauseОшибка в запросe (1093): You can't specify target table 'avitoads' for update in FROM clause
Может из за одного и того же имени таблицы и нужно использовать псевдонимы?
Отредактированно VirtualMan (10.01.2017 12:22:59)
Неактивен
Попробуйте такой вариант
Отредактированно klow (10.01.2017 12:26:21)
Неактивен
klow написал:
это в лоб, но думаю есть более грамотное решение
Это решение, которое рекомендуют в документации. Другой способ - это использовать много-табличную форму UPDATE, примеры тут. Суть в том же - переносим второе упоминание таблицы в часть from, где она материализуетя. Отличие эстетическое и в ряде версий много-табличные UPDATE (DELETE) оптимизатор умеет лучше оптимизировать.
Неактивен
Спасибо за решение и полезную информацию по альтернативному решению
Правда с более сложным запросом Двойной селект ругается:
Ошибка в запросe (1292): Incorrect datetime value: '2015%' for column 'DataAdd' at row 1
Столбец DATA - это datetime
UPDATE testtable SET Status = 'VIP' WHERE Phone IN ( SELECT * FROM ( SELECT Phone FROM testtable WHERE (Data NOT LIKE '2015%') AND (Status IS NULL OR Status <> 'VIP') GROUP BY Phone HAVING COUNT(Phone) > 5 AND COUNT(DISTINCT Title) > 5) AS Temp)
Отредактированно VirtualMan (10.01.2017 14:31:14)
Неактивен