Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MySQL] Выбор повторяющихся записей 
V
    Опции темы
DCoder
Дата 5.11.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 1.3.2006
Где: Самара

Репутация: нет
Всего: нет



Из таблицы необходимо выбрать все записи, в которых одновременно равны значения полей, назовём их field1 и field2.
PM MAIL   Вверх
ТоляМБА
Дата 5.11.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Код
Select *
from table1
where field1=field2
Скачай учебник - это азы  smile 
PM   Вверх
DCoder
Дата 6.11.2008, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 1.3.2006
Где: Самара

Репутация: нет
Всего: нет



2 ТоляМБА : Я имел ввиду, что поле field1 одной записи равно полю field1 другой записи и то же самое с полем field2. 
PM MAIL   Вверх
Akina
Дата 6.11.2008, 09:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

select t1.*
from mytable as t1
left join
(
  select field1, field2
  from mytable as t2 
  group by field1, field2
  having count(*)>1
)
on t1.field1=t2.field1
and t1.field2=t2.field2



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 6.11.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(DCoder @  6.11.2008,  08:58 Найти цитируемый пост)
поле field1 одной записи равно полю field1 другой записи и то же самое с полем field2.

Код

select distinct t1.*
  form my_table t1,my_table t2
  where t1.field1 = t2.field1
        and t1.field2 = t2.field2


Это сообщение отредактировал(а) Zloxa - 6.11.2008, 09:56


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 6.11.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Zloxa, по-моему, будут выведены все записи. Для каждой записи выполняется указанное условие со своей копией.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 6.11.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  6.11.2008,  10:07 Найти цитируемый пост)
будут выведены все записи

Точно.
Надо добавить условие на неравенство ключа
Код

select distinct t1.*
  form my_table t1,my_table t2
  where t1.field1 = t2.field1
        and t1.field2 = t2.field2
        and t1.id <> t2.id



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 6.11.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  6.11.2008,  11:38 Найти цитируемый пост)
Надо добавить условие на неравенство ключа

Если таковой вообще имеется, что не факт...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DCoder
Дата 6.11.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 1.3.2006
Где: Самара

Репутация: нет
Всего: нет



Цитата

Если таковой вообще имеется, что не факт...

Таковой имеется smile 

Zloxa, Спасибо, что правильно поняли smile

С ключом будет немного посложнее... Дело в том, что в таблице ключом является комбинация полей, среди которых есть поле field1. Хотя, можно проверить на неравенство значения остальных полей, составляющих первичный ключ?

PM MAIL   Вверх
Akina
Дата 6.11.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



DCoder, попробуйте мой запрос. В нем этой проблемы нет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 6.11.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  6.11.2008,  17:10 Найти цитируемый пост)
В нем этой проблемы нет

Очевидно, на этот раз вы имели в виду inner  a не left join smile

Проблемы есть в обоих.
Если Field1, Field2 - nullable

ЗЫ.
А вообще я условие понял,видимо, не правильно.
 Вывести все строки таблицы, для которых Field1 упоминается не единожды, и Field2 упоминается не единожды (и не факт что повторные упоминания содержатся в одной строке)

И относительно того, как я неправильно понял, я неправильно написал запрос. Правильно было бы так:
Код

select distinct t1.*
  form my_table t1,my_table t2
  where (t1.field1 = t2.field1
        or t1.field2 = t2.field2)
        and t1.id <> t2.id

or на and заменил в последний момент, когда болддом выделял в тексте цитаты буку "И". Заменил зря.

Есил бы я изначально правильно понял бы условие задачи, пожалуй решал бы методом от Akina (с поправкой inner вместо left) - сортировок меньше.

Это сообщение отредактировал(а) Zloxa - 6.11.2008, 18:23


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 6.11.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  6.11.2008,  18:58 Найти цитируемый пост)
Проблемы есть в обоих.
Если Field1, Field2 - nullable

В этом случае требование совпадения лишено смысла.

Цитата(Zloxa @  6.11.2008,  18:58 Найти цитируемый пост)
я условие понял,видимо, не правильно.
 Вывести все строки таблицы, для которых Field1 упоминается не единожды, и Field2 упоминается не единожды (и не факт что повторные упоминания содержатся в одной строке)

Я так понял задание, что пару field1+field2 каждой записи надо понимать как обобщенное данное, и именно дубликаты по нему и требуются.

Цитата(Zloxa @  6.11.2008,  18:58 Найти цитируемый пост)
(с поправкой inner вместо left) - сортировок меньше

Ну да - все равно выполнение left начинается с выполнения inner. Правда, довесок получился бы пустым, но на осознание этого уйдет некоторое время.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 6.11.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  6.11.2008,  19:31 Найти цитируемый пост)
все равно

smile 
В результате выполнения твоего запроса выведется ВСЕ содержимое таблицы, без всяких там довесков и без фильтрации, если left  не заменить на inner.

Когда я говорил про сортировки, я имел в виду сортировку group by по двум полям в твоем примере, против сортировки distinct по всем полям, как в моем примере.
 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DCoder
Дата 7.11.2008, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 1.3.2006
Где: Самара

Репутация: нет
Всего: нет



Спокойно smile всё правильно. Нужна повторяющаяся пара fiedl1+field2. Я попробую эти запросы.
PM MAIL   Вверх
Akina
Дата 7.11.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Zloxa, плохой я вчера был, голова не варила... сорри.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.