За последние 24 часа нас посетили 16596 программистов и 1678 роботов. Сейчас ищут 874 программиста ...

Возможно ли сделать UPDATE после сравнения в нескольких табл

Тема в разделе "MySQL", создана пользователем SaM1001, 6 мар 2014.

  1. SaM1001

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

    С нами с:
    19 июн 2009
    Сообщения:
    60
    Симпатии:
    0
    Возможно ли сделать UPDATE после сравнения в нескольких таблицах?

    Пример:
    У меня три таблицы.
    В первой собраны диски с музыкой. Сортированы по id
    Во второй собраны исполнители. Они тоже сортированы по id_lieg (получаться, что за каждым диском из первой таблицы запись исполнителя повторяеться)
    А в третьей собраны данные где эти диски лежат на полках. Сортировка также по id_lieg. Сейчас тут только возможность при поступлении нового диска внести его в базу как новый и нет возможности закрепить его за одним испонителем.

    Вопрос:

    Как мне сделать правильно UPDATE, чтобы проверить БД на наличие повторяющихся исполнителей и соединить их в одно (закрепить им один id), паралельно прописать в соседние таблицы столбец этот id_interpr.

    Вот по этому запросу я вывожу всё на экран:

    Код (Text):
    1.  
    2. SELECT
    3. l.lieg_nr, lg.id,
    4. l.id AS l_lieg, lg.id_liegenschaften AS lg_lieg, lhh.id_liegenschaften AS lhh_lieg,
    5. lg.gebaeude_nr, lg.strasse, lg.hausnummer, lg.plz, lg.ort, lhh.hv_anrede, lhh.hv_name, lhh.hv_vorname
    6.  
    7. FROM
    8. liegenschaften_gebaeude AS lg,
    9. liegenschaften AS l,
    10. liegenschaften_hv_hm AS lhh
    11.  
    12. WHERE
    13. lg.id_liegenschaften = l.id
    14. &&
    15. lg.id_liegenschaften = lhh.id_liegenschaften
    [​IMG]

    ЗЫ:
    Я как это вижу, поправьте если что не так:

    В таблицу lhh добавить столбец hv_id, сделать проверку поторяющиеся записи и присвоить им только один hv_id, по которому можно будет определять сколько у него записей в lg и l

    В какую сторону мне смотреть, чтобы не ждать ответа, а делом заняться?

    ЗЗЫ:
    Тут старая БД и мне надо перенести данные в новую. Вот и хочу упростить её.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    за один запрос никак

    но есть транзакции
     
  3. SaM1001

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

    С нами с:
    19 июн 2009
    Сообщения:
    60
    Симпатии:
    0
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    Класс!!! Сам не дошёл бы. Буду ковырять как мне это в моём случае применить.

    Есть идеи как мне лучше hv_name упорядочить до одного раза, чтобы он больше не повторялся, но записи из других таблиц остались за ним?

    Как мне правильно переписать l_lieg, lg_lieg, lhh_lieg у которых один и тотже hv_name?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    не знаю, тебе надо самому подумать, как тебе удобно и чем пользоваться. если ты собираешься произвести операци с данными типа твоей, и боишься, что кто-то или что-то может в середине процессса с этими данными что-то сделать, или сделать что-то на основе этих данных - то стоит юзать транзакции. =)
     
  5. SaM1001

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

    С нами с:
    19 июн 2009
    Сообщения:
    60
    Симпатии:
    0
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    Я наверное не правильно объяснил мою проблему, мне просто надо исключить повторяющиеся записи, чтобы пользоваться по человечески БД. Потому, что если я хочу посмотреть сколько у hv_name есть адресов это просто невозможно на данный момент. Мне надо ещё раз сортировать по hv_vorname, т.к. hv_name может сущесвовать несколько раз. А так был бы один нормальный hv_id (которого сейчас нет) и по нему индексируются обе другие таблицы. Мне это один раз надо сделать на локалке, чтобы экспортировать данные и импртировать в дургую БД. Вот и вопрос, как это можно сделать лучше.
    Спрашиваю, потому, что всё что я могу, выучил методом тыка и вопросов, мне никто не показывал как работать с этим и о много я просто не знаю что существует вообще в природе
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

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

    вот чтобы этого избежать - юзай транзакции.

    а как склеить всё в одну - это уже тебе решать самому.
     
  7. SaM1001

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

    С нами с:
    19 июн 2009
    Сообщения:
    60
    Симпатии:
    0
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    Мне и правда надо исключить дубли, с этими данными никто не работает. Я их скинул на локалку и собираюсь перенести в другую БД (что в принципе уже и сделал, пока не напаролся на вот этот косяк. Я уже и работал с ними, но с такой структурой работать не возможно) Вот и хочу упростить. Какие методы для этого существуют?
    Вот конкретно в моём примере как мне правильно переписать l_lieg, lg_lieg, lhh_lieg у которых один и тот же hv_name?

    Как SELECT сделать я знаю, а как переписать эти столбцы. Вот тут чуток не догоняю. Поэтому и правильно мысль озвучить не могу
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    что вообще значит "переписать столбцы"?
     
  9. SaM1001

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

    С нами с:
    19 июн 2009
    Сообщения:
    60
    Симпатии:
    0
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    На примере из первого сообщения: например взять первый lhh_lieg (8758) и присвоить его четырём последующим... как-то так. Если я прав, то у меня тогда в БД останеться один раз hv_name, но я смогу по этому номеру получить все lieg_nr
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    по какому правилу? почему этот присвоить другим, а не другой этому?
     
  11. SaM1001

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

    С нами с:
    19 июн 2009
    Сообщения:
    60
    Симпатии:
    0
    Re: Возможно ли сделать UPDATE после сравнения в нескольких

    Никакого правила, просто самый первый который попался на глаза. У меня 11К строчек, в ручную муторно обрабатывать. Сейчас на пробу сделал экспорт в csv и первую тысячу ручками поправил. Буду пробовать что из этого получиться.
    Тут муторно всё, сам не разобрался толком ещё. Мне всю инфу не в 3 таблицы надо делить будет, а 4ре. По другому не вижу выхода. Но для начала надо изменить номера. Отдал вчера ребятам из бугалтерии, пусть в экселе руками правят.
    Есть тут ещё такая фигня, что под одним lieg_nr могут несколько разных strasse, hausnummer, plz, ort быть. Поэтому буду выгружать в другую таблицу и присваивать один lhh_lieg
    Как-то так...

    Спасибо тебе за наводящие вопросы. Помогают мне с другой стороны увидеть проблему и решать её!