|
Модифицирующий запрос с условием, где ссылки из трех таблиц
|
|||
---|---|---|---|
#18+
Таблицы: Код: plaintext 1. 2.
В M есть ссылка на таблицу OPER , которая, в свою очередь имеет ссылки на таблицу PASP Таблица PASP содержит атрибут в виде ссылки на таблицу Т4 (что содержит таблица Т4 не имеет значения - здесь работаем только со ссылками и идентификаторами). Задача в том чтобы сочинить запрос (update) для заполнения нового поля ID_T4 в таблице M . А условие можно сформулировать примерно так: По значению ID_OPER в M найти записи в OPER , но такие, чтобы две записи из PASP , на которые ссылаются поля ID_PASP_M и ID_PASP_F в OPER , имели одинаковые значения в полях ID_4. Значением для заполнения поля ID_T4 в таблице M в случае совпадения должно быть ID_T4 из PASP . Если использовать приведенный пример таблиц и их записей, то результат работы модифицирующего запроса М должно содержать такие строки: Код: plaintext 1. 2. 3. 4.
Может кому не левниво поразбираться в этом месиве. Скрипт (сделан в IBExpert) CREATE TABLE M (ID INTEGER NOT NULL, ID_OPER INTEGER, ID_T4 INTEGER); CREATE TABLE OPER (ID INTEGER NOT NULL, ID_PASP_M INTEGER, ID_PASP_F INTEGER); CREATE TABLE PASP (ID INTEGER NOT NULL, ID_T4 INTEGER); execute block as begin insert into pasp (ID, ID_T4) values (1, 1); insert into pasp (ID, ID_T4) values (2, 1); insert into pasp (ID, ID_T4) values (3, 2); insert into pasp (ID, ID_T4) values (4, 3); insert into pasp (ID, ID_T4) values (5, 3); insert into oper (ID, ID_PASP_M, ID_PASP_F) values (1, 1, 2); insert into oper (ID, ID_PASP_M, ID_PASP_F) values (2, 3, 2); insert into oper (ID, ID_PASP_M, ID_PASP_F) values (3, 1, 4); insert into oper (ID, ID_PASP_M, ID_PASP_F) values (4, 4, 5); insert into M (ID, ID_OPER) values (1, 1); insert into M (ID, ID_OPER) values (2, 2); insert into M (ID, ID_OPER) values (3, 3); insert into M (ID, ID_OPER) values (4, 4); end ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2015, 16:21 |
|
Модифицирующий запрос с условием, где ссылки из трех таблиц
|
|||
---|---|---|---|
#18+
И в чём проблема? Один тривиальный update с подзапросом или merge без проблем справятся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2015, 16:30 |
|
Модифицирующий запрос с условием, где ссылки из трех таблиц
|
|||
---|---|---|---|
#18+
Может быть. Но придумать этот тривиальный подзапрос не получается. Про merge посмотрю. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2015, 16:47 |
|
Модифицирующий запрос с условием, где ссылки из трех таблиц
|
|||
---|---|---|---|
#18+
SAN_01_08Но придумать этот тривиальный подзапрос не получается. Потому что формулировка условия мутная. Вычисти. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2015, 16:48 |
|
Модифицирующий запрос с условием, где ссылки из трех таблиц
|
|||
---|---|---|---|
#18+
Согласен, мутная, но чистил долго и нудно. Ан, все одно - мутната. Про merge интересная наколка. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2015, 17:10 |
|
Модифицирующий запрос с условием, где ссылки из трех таблиц
|
|||
---|---|---|---|
#18+
SAN_01_08По значению ID_OPER в M найти записи в OPER , но такие, чтобы две записи из PASP , на которые ссылаются поля ID_PASP_M и ID_PASP_F в OPER , имели одинаковые значения в полях ID_4. Задача тривиальная! В чем проблема? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2015, 02:44 |
|
|
start [/forum/topic.php?fid=40&msg=39116092&tid=1562486]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 147ms |
0 / 0 |