[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вывод дубликатов
maximka787
ребят помогите ВЫВЕСТИ все дубликаты.
Таблица: id, name, ... дубликаты в `name`

SELECT
`id`, `name`
FROM
`product`
GROUP BY
`name`
HAVING COUNT(*) >1
ORDER BY
`name`

тут выводит верно, но показывает один раз копию.



Спустя 5 минут, 21 секунда (23.08.2011 - 13:03) neadekvat написал(а):
Сходу придумывается только такое:
SELECT t1.`id`, t1.`name`, t2.`id`, t2.`name`
FROM `product` t1, `product` t2
WHERE t1.`name` = t2.`name` AND t1.`id` < t2.`id`

Спустя 7 минут, 24 секунды (23.08.2011 - 13:11) maximka787 написал(а):
neadekvat
пример по-моему рабочий, но долгй, и не совсем понятный, а разве нет более простых запросов для моих целей?

Спустя 3 минуты, 41 секунда (23.08.2011 - 13:14) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 14:11)
пример по-моему рабочий, но долгй, и не совсем понятный, а разве нет более простых запросов для моих целей?

А фиг знает. Поищи или подожди еще ответов. Я не могу вспомнить, как можно достать дубликаты.
Запрос можно (нужно) переписать на LEFT JOIN:
SELECT t1.`id`, t1.`name`, t2.`id` as `id_2`, t2.`name` as `name_2`
FROM `product` t1
LEFT JOIN `product` t2 ON t1.`name` = t2.`name`
WHERE t1.`id` < t2.`id`

А что непонятно?

Спустя 3 минуты, 59 секунд (23.08.2011 - 13:18) maximka787 написал(а):
neadekvat
да про LEFT JOIN пора бы уже начинать браться. за 3 года ни разу не использовал.
Приходилось делать запросы огромные, но без JOIN smile.gif

Спустя 4 минуты, 56 секунд (23.08.2011 - 13:23) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 14:18)
да про LEFT JOIN пора бы уже начинать браться. за 3 года ни разу не использовал.
Приходилось делать запросы огромные, но без JOIN

О_О да ладно?
Чтобы не использовать JOIN, должны быть веские причины (например, база, находящаяся физически на разных серверах).
К тому же, именнов JOIN ничего сложного нет абсолютно.

Спустя 1 минута, 26 секунд (23.08.2011 - 13:25) maximka787 написал(а):
neadekvat
я наверно, просто не писал сложных запросов, соединял по 3-4 таблицы одним =

Спустя 4 минуты, 36 секунд (23.08.2011 - 13:29) maximka787 написал(а):
СДЕЛАЛ! да INNER JOIN помог

SELECT
t1.`id`,
t1.`name`
FROM
`product` AS t1
INNER JOIN
`product` AS t2 ON t1.`name` = t2.`name` AND
t1.`id` != t2.`id`
ORDER BY
name

Спустя 21 минута, 47 секунд (23.08.2011 - 13:51) maximka787 написал(а):
А воооот вопрос такой. скажите как мне сделать update только для

SELECT
t1.`id`,
t1.`name`
FROM
`product` AS t1
INNER JOIN
`product` AS t2 ON t1.`name` = t2.`name` AND
t1.`id` != t2.`id`
ORDER BY
name


строк. это очень сложно?
наприме update table set name = XXX where (мой запрос выше)

Спустя 1 минута, 55 секунд (23.08.2011 - 13:53) neadekvat написал(а):
Большое значение в программировании имеет не только теоретическая подкованность, но и любознательность, подкрепляемая тестами и практикой.
Возьми да попробуй.

Спустя 1 минута, 37 секунд (23.08.2011 - 13:55) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 14:51)
where (мой запрос выше)

Только что where?
У него есть вполне себе четкий синатксис, например:
WHERE id = %SOME%
Вот с %SOME% ты можешь экспериментирвоать, но синтаксис то надо соблюдать.

Спустя 1 минута, 57 секунд (23.08.2011 - 13:56) maximka787 написал(а):
neadekvat
я за недлю больше выучил чем за год в универе) любознательность как раз есть, просто обновить таблицу где простое условие просто, а там где сам селект сложный даже не знаю с какой стороны подойти.

Спустя 3 минуты, 51 секунда (23.08.2011 - 14:00) neadekvat написал(а):
maximka787, вот так можно делать:
UPDATE tbl SET col = val WHERE col = (SELECT col FROM tbl WHERE col = val);
col и val - разные значения.
Обрати внимание, что в подзапросе ты должен выбирать только одно поле (выделено жирным). Возможно, можно и иначе. Но для этого нужно покапать маны.

Спустя 1 час, 3 минуты, 37 секунд (23.08.2011 - 15:04) maximka787 написал(а):
ПОМОГИТЕЕ лопну скоро, не мгу никак логику додумать немного

UPDATE `product` SET `url`= `url`+1 WHERE `name` =
(

SELECT
COUNT(url) AS cnt
FROM
`product`
WHERE
`name` = `name`
GROUP BY `url` HAVING ( COUNT(url)>1 )
)


ошибки у меня в двух местах.
WHERE `name` =
и
WHERE
`name` = `name`

суть задачи, приплюсовать к полю url цифру если есть копия этого url

Спустя 7 минут, 35 секунд (23.08.2011 - 15:12) neadekvat написал(а):
Чего-то я не догнал. Я тебе дал запрос. Ты какой-то запрос придумал. Так почему сейчас ты используешь вообще третий?

Спустя 1 минута, 23 секунды (23.08.2011 - 15:13) maximka787 написал(а):
neadekvat
ну так это результат, начал с твоего, дошел до этого. переделал так сильно

Спустя 2 минуты, 28 секунд (23.08.2011 - 15:15) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 16:13)
ну так это результат, начал с твоего, дошел до этого. переделал так сильно

И что, работает запрос-то?

Спустя 2 минуты, 18 секунд (23.08.2011 - 15:18) maximka787 написал(а):
Запрос глуп! явно не умею писать такие.

Вот, вторая часть запроса, это условие точно проверяет есть ли копия у одной, текущей записи.

SELECT 
COUNT(url) AS cnt
FROM
`product`
WHERE
`url` = 'MYTEXT'
GROUP BY `url` HAVING ( COUNT(url)>1 )


_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.