Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
Надо внести данные в две связанные таблицы в одном запросе или в нескольких, но без записывания промежуточных результатов во внешнем хранилище. Выглядит это так. Создаем новую запись в таблице: Код: plaintext Есть вторая таблица table2, которая связана с первой через поле table2.table1_id. Чтобы создать новую запись, надо составить запрос: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2008, 17:41 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
rockclimberНадо внести данные в две связанные таблицы Код: plaintext Код: plaintext rockclimberЖелательно второй запрос отправлять одновременно или почти одновременно.делайте в одной транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2008, 17:54 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
Спасибо, то что нужно. LeXa NalBat rockclimberЖелательно второй запрос отправлять одновременно или почти одновременно.делайте в одной транзакции Это не так принципиально, я имел ввиду обойтись без системы типа "insert into t1 ... " -> "select ... from t1 ... " -> "insert... into t2". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2008, 18:18 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
если table1.table1_id - serial то можно просто получить текущее значение sequence, например так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2008, 18:45 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
rockclimberя имел ввиду обойтись без системы типа "insert into t1 ... " -> "select ... from t1 ... " -> "insert... into t2".INSERT RETURNING не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2008, 09:54 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat rockclimberя имел ввиду обойтись без системы типа "insert into t1 ... " -> "select ... from t1 ... " -> "insert... into t2".INSERT RETURNING не подходит? Я же сказал, rockclimberСпасибо, то что нужно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2008, 11:35 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
А, дошло! Короче, когда я говорил: авторобойтись без системы типа "insert into t1 ... " -> "select ... from t1 ... " -> "insert... into t2". Я имел ввиду совместить первый insert c select'ом, что и делает insert returning... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2008, 11:39 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
Ёшесли table1.table1_id - serial то можно просто получить текущее значение sequence, например так: Код: plaintext 1. Между этими вставками сиквенс обязатеьлно успеет измениться! ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2008, 20:18 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
chAlx Ёшесли table1.table1_id - serial то можно просто получить текущее значение sequence, например так: Код: plaintext 1. Между этими вставками сиквенс обязатеьлно успеет измениться! ;)нет, вариант с currval правильный Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 10:10 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatнет, вариант с currval правильный Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если между INSERT в первую таблицу (берется nextval) и во вторую таблицу (берется currval) проскочит ещё один (или несколько) nextval по тому же сиквенсу из другой сессии? currval-то изменится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 21:46 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
нет, не изменится. currval - это не текущее общесистемное значение. currval - это то что вернул предыдущий nextval в этой сессии (в этом подключении). то есть это запомненное значение и оно не меняется при изменении секвенса соседними подключениями. оно меняется только при вызове nextval в этой сессии. Код: plaintext 1. 2. 3. 4. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2008, 01:23 |
|
||
|
Запись в связанные таблицы в одном запросе
|
|||
|---|---|---|---|
|
#18+
Ёшcurrval - это не текущее общесистемное значение. currval - это то что вернул предыдущий nextval в этой сессии (в этом подключении). то есть это запомненное значение и оно не меняется при изменении секвенса соседними подключениями. оно меняется только при вызове nextval в этой сессии.Проверил. Действительно. Ой :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2008, 09:17 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2004077]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 344ms |

| 0 / 0 |
