Или торможу или не реальная задача. Помогите, плиз, составить select

bovkun

Новичок
Или торможу или не реальная задача. Помогите, плиз, составить select

Смысл запроса - нужно выбрать записи подобные 4 и 5 , т.е. только те записи, которые не повторяются по полю "name", но при этом поле "opt" равно "a".


---------------------------
id | name | opt
---------------------------
1 | ivanov | a
2 | ivanov | b
3 | ivanov | c
4 | petrov | a
5 | sidorov | a
---------------------------


Весь трабл в том, что нужно почистить довольно большую таблицу. Вручную если чистить, то на ней умереть можно. Нужно выжить :), вот решил выбрать все лишние записи, но как? Ломаю голову с GROUP BY, но все это те то, если не ошибаюсь.
 

Vallar_ultra

Любитель выпить :)
насколько я понимаю - надо выбрать только не повторяющиеся по имени записи... так?
если так и операция однаразовая:
[sql]
SELECT *
FROM test
WHERE id NOT
IN (

SELECT DISTINCT t1.id
FROM test t1, test t2
WHERE (
t2.name = t1.name
AND t2.id != t1.id
)
)
AND opt = 'a'
[/sql]
 

chira

Новичок
Код:
SELECT *
FROM test t1
 LEFT JOIN test t2 ON t2.name = t1.name AND t2.id != t1.id
WHERE t2.id IS NULL
  AND t1.opt = 'a'
 

bovkun

Новичок
КОМРАДЫ, БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!

---

dadoc

SELECT * FROM

GROUP BY name
HAVING COUNT(*) = 1 AND SUM(IF(opt<>'a',1,0)) = 0

Самое оно. Очень бысто!

---


chira
SELECT *
FROM test t1
LEFT JOIN test t2 ON t2.name = t1.name AND t2.id != t1.id
WHERE t2.id IS NULL
AND t1.opt = 'a'
Рабочий, но очень тяжеловесный (в моем случае) вариант.
 
Сверху