:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Выбрать записи с повторяющимися (дублирующими) значениями поля
Дата: 27.06.05 20:21:38 ОтветитьЦитировать

Задача

Есть одна таблица. В одном из ее полей могут содержаться повторяющиеся значения. Т.е. разные записи этой таблицы могут иметь одно и то же значение в этом поле. Как выбрать все записи, в которых имеются повторяющиеся (дублирующие) значения в этом поле.

Решение

  
 * Исходная таблица    
  CREATE CURSOR tabMain (tabMainID I, NickName C(50), curDate D, Chet L)  
  INSERT INTO tabMain (tabMainID, NickName, curDate, Chet) VALUES (1, "Первая запись", Date(2005,6,1), .F.)  
  INSERT INTO tabMain (tabMainID, NickName, curDate, Chet) VALUES (2, "Вторая запись", Date(2005,6,2), .T.)  
  INSERT INTO tabMain (tabMainID, NickName, curDate, Chet) VALUES (3, "Третья запись", Date(2005,6,3), .F.)  
  INSERT INTO tabMain (tabMainID, NickName, curDate, Chet) VALUES (4, "Четвертая запись", Date(2005,6,1), .T.)  
  INSERT INTO tabMain (tabMainID, NickName, curDate, Chet) VALUES (5, "Пятая запись", Date(2005,6,2), .F.)  
  INSERT INTO tabMain (tabMainID, NickName, curDate, Chet) VALUES (6, "Шестая запись", Date(2005,6,1), .T.)

У функции DATE() можно задавать параметры, начиная с версии Visual FoxPro 6. Для младших версий укажите значение даты другим способом.

Находим все записи, у которых повторяется значение поля curDate

  
  SELECT DISTINCT tabMain.* ;    
  FROM tabMain ;    
  INNER JOIN tabMain tabDouble ON tabMain.curDate = tabDouble.curDate  ;    
    			AND tabMain.tabMainID <> tabDouble.tabMainID ;  
  ORDER BY tabMain.curDate

Следует иметь в виду, что данное решение опирается на тот факт, что у таблицы есть уникальное (не повторяющееся) ключевое поле tabMainID.

Кроме того, данное решение легко расширить для случая, если требуется отобрать записи по повторяющемуся значению в нескольких полях. Достаточно просто добавить дополнительное условие через AND в условие объединения таблицы.

Например, найти все записи, у которых повторяется как значение поля curDate, так и значение поля Chet.

  
  SELECT DISTINCT tabMain.* ;    
  FROM tabMain ;    
  INNER JOIN tabMain tabDouble ON tabMain.curDate = tabDouble.curDate  ;    
    			AND tabMain.Chet = tabDouble.Chet ;  
    			AND tabMain.tabMainID <> tabDouble.tabMainID ;  
  ORDER BY tabMain.curDate, tabMain.Chet

Если у Вас стоит более простая задача: определить просто список значений, которые встречаются в таблице более одного раза, то это можно сделать проще.

Определяю значение поля curDate, которое встречается более одного раза

  
  SELECT tabMain.curDate  ;    
  FROM tabMain ;    
  GROUP BY tabMain.curDate ;  
  HAVING count(*) > 1
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  Работа с данными 6100 Владимир Максимов 01.03.05 21:04
  Выбрать из дочерней таблицы записи с максимальной датой 20071 Владимир Максимов 15.06.05 20:08
  Выбрать записи с повторяющимися (дублирующими) значениями поля 11783 Владимир Максимов 27.06.05 20:21
  Как выполнить восстановление поврежденных индексов 9655 Владимир Максимов 29.06.05 20:04
  Как изменить значения в одной таблице данными из другой 11591 Владимир Максимов 29.06.05 20:40
  Запрос с GROUP BY выдает сообщение о синтаксической ошибке 11188 Владимир Максимов 20.07.05 16:47
  При работе в сети иногда не открывается таблица 5466 Владимир Максимов 20.07.05 17:36
  Как получить программный код создания структуры базы данных 7813 Владимир Максимов 18.09.05 10:14
  Как восстановить поврежденную таблицу 18739 Владимир Максимов 31.08.08 22:02


Извините, но у вас нет прав для того, чтобы писать в этом форуме.

On-line: 54 and Guests: 54


© 2006 Fox Club 
Яндекс.Метрика