• SoundB (09.07.08 14:59) [0]
    Мастера не судите строго, опять вопрос по SQL очень нужна помощь.

    Копирую строки из одной таблицы в другую, нужны все поля второй таблицы кроме ID, а в поле ID первой таблицы нужно сожать максимальное количества строк таблицы 1.

    Если делаю так:

    INSERT INTO table1 (ID, NAME, DEPOSIT, DATE) SELECT (select max(id) from tblData) c1.name, c1.deposit, c1.date FROM tblData c1

    То, скрипт работает только для одной записи, как можно это дело сделать, подскажите плиз.
  • Тын-Дын © (09.07.08 15:01) [1]
    Вопрос философский. А нужно ли копировать?
  • SoundB (09.07.08 15:03) [2]

    > Вопрос философский. А нужно ли копировать?


    Да, очень нужно.

    Хотел сделать в дельфи путем While not eof - шеф приказал делать все на SQL. :(
  • Ega23 © (09.07.08 15:04) [3]
    СУБД не указана, поэтоу буду считать, что это MSSQL

    Declare @x int;
    Set NoCount ON;
    Select @x=count(*) from tblData;

    INSERT INTO table1 (ID, NAME, DEPOSIT, DATE)
     Select ID=@X, name, deposit, date from tblData;



    З.Ы. За раздачу именам полей в таблице резервированных слов (name, date) надо ставить к стенке.
  • Ega23 © (09.07.08 15:05) [4]

    > Хотел сделать в дельфи путем While not eof - шеф приказал
    > делать все на SQL. :(


    Слушай шефа, он - мудр. Это на порядки быстрее будет.
  • SoundB (09.07.08 15:06) [5]
    Прошу прощения, БД Оракул.
  • Правильный^Вася (09.07.08 15:08) [6]

    > в поле ID первой таблицы нужно сожать максимальное количества
    > строк таблицы 1

    явно что-то недоговорено, чувствуется, что должно быть "...по id текущей строки"
  • Правильный^Вася (09.07.08 15:08) [7]
    иначе какой смысл во всех строках одно и то же значение иметь?
  • ketmar © (09.07.08 15:09) [8]
    >[5] SoundB (2008-07-09 15:06:00)
    а ешё Олега слушай, он фигни не посоветует.

    ---
    All Your Base Are Belong to Us
  • SoundB (09.07.08 15:10) [9]

    > явно что-то недоговорено, чувствуется, что должно быть ".
    > ..по id текущей строки"


    Так и есть, просто в свое время наши прогеры Сикенсы не использовали по этому сожаем данные в таблицу 1, с порядковым номером (количество записей + 1)
  • Sergey13 © (09.07.08 15:13) [10]
    > [9] SoundB   (09.07.08 15:10)

    А "Сикенсы" начальник тоже не велит доделать?
  • Правильный^Вася (09.07.08 15:16) [11]

    > > явно что-то недоговорено, чувствуется, что должно быть
    > "..по id текущей строки"
    > Так и есть, просто в свое время  наши прогеры Сикенсы не использовали  
    > по этому сожаем данныев таблицу 1, с порядковым номером (количество записей + 1)

    совсем запутал
    причем тут id+1 если тебе количество считать?
  • Skyle © (09.07.08 15:20) [12]
    А кто такие Сикенсы?
  • Skyle © (09.07.08 15:20) [13]

    > Skyle ©   (09.07.08 15:20) [12]

    Хм... кажется понял, видимо это sequence....
  • SoundB (09.07.08 15:55) [14]

    > Хм... кажется понял, видимо это sequence....


    Да так и есть :)

    Люди добрые, подскажите что ни будь на подобие:

    > Ega23 ©   (09.07.08 15:04) [3]


    Только для оракул, пожалуйста :((
  • Правильный^Вася (09.07.08 16:01) [15]
    ты не обрисовал задачу
    тебе нужно [6] или же max(id)+1
  • Ega23 © (09.07.08 16:02) [16]

    > Только для оракул, пожалуйста :((


    Это уж ты сам, с ораклом не знаком. Но идея, надеюсь понятная:
    1. Заводим переменную
    2. Считываем в неё count(*) (или Max(ID), не знаю, чё там у тебя)
    3. insert into ..  select from. Вместо ID - подставляешь значение переменной.
Есть новые Нет новых   [134439   +35][b:0][p:0.001]