|
|
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
три таблицы - USERS, USLUGI, USL_FEE в последней - величины зарплат специалистов (USERS) от оказанных услуг (USLUGI) возможен ли в принципе модифицирующий запрос, который будет делать зарплаты одного специалиста равными зарплатам другого? скрипты SET SQL DIALECT 3; CREATE TABLE USERS ( USER_ID INTEGER NOT NULL, USER_NAME VARCHAR(10) ); CREATE TABLE USLUGI ( USL_ID INTEGER NOT NULL, USL_NAME VARCHAR(10) ); CREATE TABLE USL_FEE ( UF_ID INTEGER NOT NULL, USER_ID INTEGER, USL_ID INTEGER, FEE INTEGER ); INSERT INTO USLUGI (USL_ID, USL_NAME) VALUES (1, 'услуга 1'); INSERT INTO USLUGI (USL_ID, USL_NAME) VALUES (2, 'услуга 2'); INSERT INTO USLUGI (USL_ID, USL_NAME) VALUES (3, 'услуга 3'); INSERT INTO USLUGI (USL_ID, USL_NAME) VALUES (4, 'услуга 4'); INSERT INTO USLUGI (USL_ID, USL_NAME) VALUES (5, 'услуга 5'); INSERT INTO USERS (USER_ID, USER_NAME) VALUES (1, 'иванов'); INSERT INTO USERS (USER_ID, USER_NAME) VALUES (2, 'петров'); INSERT INTO USERS (USER_ID, USER_NAME) VALUES (3, 'сидоров'); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (1, 1, 1, 11); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (2, 1, 2, 12); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (3, 1, 3, 13); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (4, 1, 4, 14); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (5, 1, 5, 15); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (6, 2, 1, 21); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (7, 2, 2, 22); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (8, 2, 3, 23); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (9, 2, 4, 24); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (10, 2, 5, 25); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (11, 3, 1, 31); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (12, 3, 2, 32); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (13, 3, 3, 33); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (14, 3, 4, 34); INSERT INTO USL_FEE (UF_ID, USER_ID, USL_ID, FEE) VALUES (15, 3, 5, 35); COMMIT WORK; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 05:43:56 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
в настоящее время приходится обрабатывать каждую пару записей отдельно. А хочется чтобы красиво) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 05:45:17 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
genokв настоящее время приходится обрабатывать каждую пару записей отдельно. А хочется чтобы красиво) Каждую пару это как??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 08:30:09 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
m7mgenokв настоящее время приходится обрабатывать каждую пару записей отдельно. А хочется чтобы красиво) Каждую пару это как??? берем первую запись для 1-го специалиста, присваиваем значение зарплаты от такой же записи 2-го специалиста переходим ко второй записи, повторяем. и так до тех пор, пока записи зарплаты для 1-го специалиста не закончатся. как-то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 09:30:58 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
вот такой запрос собирает в кучу все данные, которые нужны и в таком виде, каком надо Код: sql 1. 2. 3. 4. 5. 6. как бы из него модифицирующий сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 09:40:44 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
genokберем первую запись для 1-го специалиста, присваиваем значение зарплаты от такой же записи 2-го специалиста переходим ко второй записи, повторяем. и так до тех пор, пока записи зарплаты для 1-го специалиста не закончатся. Код: sql 1. 2. Где-то так (но что-то в связи с 14866730 уверенности у меня нет, в том что правильно понял) ps/ UF_ID посади на генерато ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 10:37:47 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
m7m Код: sql 1. 2. Где-то так (но что-то в связи с 14866730 уверенности у меня нет, в том что правильно понял) работает, спасибо за подсказку но все-таки - одним запросом UPDATE это никак не сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 11:15:05 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
genokm7m Код: sql 1. 2. Где-то так (но что-то в связи с 14866730 уверенности у меня нет, в том что правильно понял) работает, спасибо за подсказку но все-таки - одним запросом UPDATE это никак не сделать? Жуткая постановка задачи. Я так понимаю, что разные специалисты могут выполнить один и тот же (одинаковый) объем работ, а если нет? Вот если для уравниловки (или для мертвых душ), то можно так: create procedure COPY_FEE(FID integer, copy_all integer) -- FID - с кого копируем ; copy_all - все услуги=1 as DECLARE VARIABLE USER_ID INTEGER; DECLARE VARIABLE USL_ID INTEGER; DECLARE VARIABLE FEE INTEGER; DECLARE VARIABLE ID INTEGER; begin -- поток "остальных" специалистов, окромя прецизионного for SELECT USER_ID from USERS where USER_ID<>:FID INTO :USER_ID do -- поток услуг и оплат for select USL_ID,FEE FROM USL_FEE WHERE USER_ID=:FID into :USL_ID,:FEE DO begin id=null; -- обязательно! select first(1) UF_ID from USL_FEE where USER_ID=:USER_ID and USL_ID into :ID; -- ID показывает наличие ранее введенной записи IF (id is not null) then update USL_FEE set FEE=:FEE where id=:id; else -- не найдено IF (copy_all=1) THEN -- требование вставить insert into USL_FEE(.....) values (.......); end end Можно поизгаляться с SQL и выправить что-то иное, но наша работа заключается в упрощении кода. Иногда я возвращаюсь к старому коду и совершенно не понимаю, как все это я написал и как все это работает. А уж разбираться в чужом - ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 11:52:26 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
ooo_kontaktЖуткая постановка задачи. Я так понимаю, что разные специалисты могут выполнить один и тот же (одинаковый) объем работ, а если нет? объем работ одинаков. Вот квалификация у специалистов разная, соответственно разный процент с выполненной работы им платится. Поэтому такая структура быть должна избыточная, ничего не поделаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 12:08:55 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
в общем, пока самым негромоздким остается способ от m4m: DELETE, а потом INSERT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 12:17:06 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
genokодним запросом UPDATE это никак не сделать? Можно сделать одним запросов MERGE. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 12:57:17 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovgenokодним запросом UPDATE это никак не сделать? Можно сделать одним запросов MERGE. вот блин, совсем же забыл про него. оказывается, пару лет назад примерно такая же задача стояла, и тогда как раз merge был использован спасибо большое! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 13:19:57 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 13:58:21 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
genokDimitry Sibiryakovпропущено... Можно сделать одним запросов MERGE. вот блин, совсем же забыл про него. оказывается, пару лет назад примерно такая же задача стояла, и тогда как раз merge был использован спасибо большое! Ну при некоторых допущениях можно и MERGE а при некоторых можно и 14867189 тебе виднее что надо на самом деле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 14:36:03 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2013, 15:04:30 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
kdvgenok, есть мнение, то left join в твоем запросе 14866730 нафиг не нужен. а какой еще вариант есть такой набор данных получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 15:14:34 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
Dmitry Kurbsky Код: sql 1. 2. 3. 4. 5. вложенный селект - вроде как не очень хорошо использовать. у в рабочем варианте у меня получится UPDATE .... set P1=(SELECT....), P2=(SELECT....), P3=(SELECT....) WHERE ... не вариант, в общем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 15:24:15 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
genok, нафиг тебе вложенный селект делать когда merge есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 15:34:18 |
|
||
|
Нужна помощь с модифицирующим запросом
|
|||
|---|---|---|---|
|
#18+
Симонов Денисgenok, нафиг тебе вложенный селект делать когда merge есть вложенные селекты Dmitry Kurbsky предложил. Сам я - за Merge, выше уже писалось про это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 17:00:15 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38403497&tid=1564311]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
227ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 536ms |

| 0 / 0 |
