Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка записей с одинаковыми значениями конкретного поля.
 
 автор: ExtraBrain   (27.10.2009 в 11:44)   письмо автору
 
 

Есть таблица
  fam   |   im   |  ot
---------------------------------------
Иванов  | Иван   | Петрович
Иванов  | Степан | Сидорович
Петров  | Петр   | Петрович
Кирюхин | Виктор | Иванович
Кирюхин | Иван   | Кузьмич
----------------------------------------
Так вот нужно одним SQL запросом получить результат
  fam   |   im   | ot
---------------------------------------
Иванов  | Иван   | Петрович
Иванов  | Степан | Сидорович
Кирюхин | Виктор | Иванович
Кирюхин | Иван   | Кузьмич
----------------------------------------

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

  Ответить  
 
 автор: Trianon   (27.10.2009 в 12:49)   письмо автору
 
   для: ExtraBrain   (27.10.2009 в 11:44)
 

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

  Ответить  
 
 автор: ExtraBrain   (28.10.2009 в 23:30)   письмо автору
 
   для: Trianon   (27.10.2009 в 12:49)
 

Ну пусть будет ключ. Как это можно сделать с ключом?

  Ответить  
 
 автор: Trianon   (29.10.2009 в 02:12)   письмо автору
 
   для: ExtraBrain   (28.10.2009 в 23:30)
 

Так или примерно так:
SELECT t1.*
  FROM tbl t1 
    LEFT JOIN tbl t2 ON t1.fam = t.fam AND t1.id <> t2.id
  ORDER BY t1.fam

  Ответить  
 
 автор: Лена   (29.10.2009 в 13:50)   письмо автору
 
   для: Trianon   (29.10.2009 в 02:12)
 

Те строки, которые не нужно учитывать, в условие WHERE нужно поставить

SELECT t1. * 
FROM tbl t1
LEFT JOIN tbl t2 ON t1.fam = t2.fam
WHERE t1.id <> t2.id
ORDER BY t1.fam

  Ответить  
 
 автор: Trianon   (29.10.2009 в 14:06)   письмо автору
 
   для: Лена   (29.10.2009 в 13:50)
 

Ага.

  Ответить  
 
 автор: ExtraBrain   (29.10.2009 в 14:10)   письмо автору
 
   для: Лена   (29.10.2009 в 13:50)
 

Всем спасибо. Проверил на PgSQL - всё работает. Проверю еще на MySQL, но думаю, что тоже должно работать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования