• jack128_ (31.03.08 18:04) [0]
    СУБД FireBird1б5

    Имеем такой запрос:

    update DONGLE_REPLACES dr
    set
     dr.DONGLE_ID = (select d.DONGLEID from DONGLES d where d.ID = dr.DONGLE_OLD),
     dr.DONGLE_PN = (select d.DONGLEPN from DONGLES d where d.ID = dr.DONGLE_OLD)



    как видим для апдейта каждой записи выполняется два запроса. Мона как нить вынести из "за скобки" ?? Чтоб одним селектом выбрать оба поля из таблицы dongles и запихнуть их в dongle_replaces
  • jack128_ (31.03.08 18:04) [1]

    > как видим для апдейта каждой записи выполняется два подзапроса select. Мона как нить вынести их "за скобки" ?
  • sniknik © (31.03.08 18:15) [2]
    в mssql (и даже access) есть такая операция как join, можно соединить и апдейтить все скопом.

    в FireBird1б5 такой нет?
  • Ega23 © (31.03.08 18:32) [3]
    А если так:  
    update DONGLE_REPLACES
    set
    DONGLE_ID = d.DONGLEID,
    DONGLE_PN = d.DONGLEPN
    from DONGLE_REPLACES dr, DONGLES d
     where d.ID = dr.DONGLE_OLD


    ?
  • sniknik © (31.03.08 20:09) [4]
    > А если так:
    это и есть join, только неявный, если пройдет то пройдет и так (предпочитаю писать явно)
    update DONGLE_REPLACES
    set
    DONGLE_ID = d.DONGLEID,
    DONGLE_PN = d.DONGLEPN
    from DONGLE_REPLACES dr INNER JOIN DONGLES d ON dr.DONGLE_OLD = d.ID


    тоже самое но, имхо, более понятно.
  • Ega23 © (31.03.08 21:23) [5]

    > sniknik ©   (31.03.08 20:09) [4]


    Кстати, о пцыцах: вот объясни мне, какая разница - INNER JOIN или в where условие?
    Просто в разных книжках по MSSQL всречаются обе формы записи.
    Какая из них более правильная?
  • Anatoly Podgoretsky © (31.03.08 21:40) [6]
    > Ega23  (31.03.2008 21:23:05)  [5]

    Что такое правильная.
    А условие в WHERE частный, неоптимальный случай INNER JOIN
    Не надо совать условия соединения в условия отбора.
    Некоторые, даже мощные СУБД долго не могли это реализовать.
Есть новые Нет новых   [134433   +22][b:0][p:0.001]