За последние 24 часа нас посетили 17511 программистов и 1622 робота. Сейчас ищут 1685 программистов ...

Выборка повторений

Тема в разделе "MySQL", создана пользователем Vladislav_Yushkin, 7 апр 2008.

  1. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Подскажите пожалуйста как правильно написать запрос.

    Есть две таблицы
    Код (Text):
    1.  
    2. table1
    3. id name
    4. 1  Вася
    5. 2  Женя
    6. 3  Петя
    7. 4  Катя
    8. 5  Лена
    9.  
    10.  
    11. table2
    12. id id_name param
    13. 1  1       aa
    14. 2  3       bb
    15. 3  2       cc
    16. 4  1       dd
    17. 5  1       ee
    18. 6  2       ff
    19. 7  1       gg
    20. 8  5       hh
    Вопрос как написать запрос, чтобы производить выборку из второй таблицы таким образом чтобы выдавал только те строки где есть повторения в поле id_name, и производил подстановку по этому полю из первой таблицы.

    Конкретно должно получиться следующее
    Код (Text):
    1.  
    2. table2.id table2.id_name table1.name table2.param
    3. 1         1              Вася        aa
    4. 3         2              Женя        cc
    5. 4         1              Вася        dd
    6. 5         1              Вася        ee
    7. 6         2              Женя        ff
    8. 7         1              Вася        gg
    Вот такой запрос
    SELECT table2.id table2.id_name table1.name table2.param FROM table1, table2 WHERE table1.id=table2.id_name
    выдает все восемь строк, а нужно только те где встречаются повторения по полю id_name

    Подскажите как написать...
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    в моей подписи примеры на эту тему есть.
    Конкретнее - "агрегирование данных"
     
  3. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    [sql]
    SELECT table2.id table2.id_name table1.name table2.param FROM table1, table2
    WHERE table1.id=table2.id_name AND
    table2.id_name IN
    (
    SELECT table2.id_name
    FROM table2
    GROUP BY table2.id_name
    HAVING COUNT(table2.id_name) > 1
    )
    [/sql]

    такой запрос вроде работает. Но использование IN замедляет работу. Возможно ли как нибудь использовать JOIN вместо IN?
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    да.

    select * from t1, t2, (select id from t2 where...) t3 where

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

    сравнишь время - напиши разницу.