powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложный запрос!
3 сообщений из 3, страница 1 из 1
Сложный запрос!
    #38362105
vladimiromsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, и спасибо за ранее ответ!

Есть следующие таблицы
jobe_nomen:
- id bigint
- jobe_id bigint
- nomen_id bigint
- number int
- mnemo char(50)

doc_body:
- id
- nomen_id bigint
- count double

Query выглядит следующем способом:
SELECT
*
FROM
doc_body
LEFT JOIN jobe_nomen on ((doc_body.nomen_id = jobe_nomen.nomen_id) and (jobe_nomen.jobe_id:= ajobe_id))
WHERE
(doc_body.jobe_id := ajobe_id)

Но как сделать что бы, в запросе присутствовали и другие строки из jobe_nomen с указанным jobe_id, попробывал все и RIGHT OUTER JOIN, единственно что получилось так это:
сначало сделал LEFT OUTER JOIN затем UNION и RIGHT OUTER JOIN, но работает медленно. Может поможет кто нибудь правильно составить запрос
...
Рейтинг: 0 / 0
Сложный запрос!
    #38362123
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vladimiromskВсем привет, и спасибо за ранее ответ!

Есть следующие таблицы
jobe_nomen:
- id bigint
- jobe_id bigint
- nomen_id bigint
- number int
- mnemo char(50)

doc_body:
- id
- nomen_id bigint
- count double

Query выглядит следующем способом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  *
FROM
  doc_body
    LEFT JOIN jobe_nomen on ((doc_body.nomen_id = jobe_nomen.nomen_id) and (jobe_nomen.jobe_id:= ajobe_id))
WHERE
  (doc_body.jobe_id := ajobe_id)



Но как сделать что бы, в запросе присутствовали и другие строки из jobe_nomen с указанным jobe_id, попробывал все и RIGHT OUTER JOIN, единственно что получилось так это:
сначало сделал LEFT OUTER JOIN затем UNION и RIGHT OUTER JOIN, но работает медленно. Может поможет кто нибудь правильно составить запрос
если то, что получилось - устраивает, то это FULL JOIN которого в МуСКЛ нет, и "эмулируется" он именно так,
а "медленно" - план смотри, и индексами занимайся

зы
и так, "природней" как-то смотрится, имхо
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  *
FROM
  doc_body
    LEFT JOIN jobe_nomen on ((doc_body.nomen_id = jobe_nomen.nomen_id) and (doc_body.jobe_id = jobe_nomen.jobe_id))
WHERE
  (doc_body.jobe_id := ajobe_id)
...
Рейтинг: 0 / 0
Сложный запрос!
    #38362610
vladimiromsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Спасибо, за ответ! Скрипт я специально упростил что бы долго не разбираться в не нужной информации.
Я все так сделал что мне требовалось, скрипт выполняется:
Time: 0.721ms

Procedure executed successfully
Affected rows: 0

Parameters: aobject_rn BIGINT, aobjectrun_rn BIGINT, aaddress_pod_rn BIGINT, ajobe_rn BIGINT, anomen_rn BIGINT, aIsNull integer
198, 0, 0, 43, 0, 0
Return values: 198, 0, 0, 43, 0, 0


Против 20 секунд, которая вполнялась через эмуляцию FULL OUTER JOIN

Ниже процедура с финальным скриптом:

DROP PROCEDURE IF EXISTS `ObjectRunNomens_GET`;

CREATE DEFINER = `u820416175_plus`@`31.170.164.29` PROCEDURE `ObjectRunNomens_GET`(aobject_rn BIGINT, aobjectrun_rn BIGINT, aaddress_pod_rn BIGINT, ajobe_rn BIGINT, anomen_rn BIGINT, aIsNull integer)
READS SQL DATA
BEGIN

SELECT
`jobe_nomen`.`jobe_nomen_number` AS `number`,
`nomens`.`nomen_rn` AS `nomen_rn`,
`nomens`.`nomen_mnemo` AS `nomen_mnemo`,
`units`.`units_rn` AS `units_rn`,
`units`.`units_mnemo` AS `units_mnemo`,
`units`.`units_code` AS `units_code`,
`doc_body`.`doc_body_count` AS `count`,
`object_run`.`object_run_rn` AS `object_run_rn`,
`object_run`.`object_run_rn_object_header` AS `object_header_rn`,
`object_run`.`object_run_rn_jobe` AS `jobe_rn`,
`object_run`.`object_run_rn_address_pod` AS `address_pod_rn`
FROM
((((`jobe_nomen`
CROSS JOIN
`object_run`
ON
((`object_run`.`object_run_rn_jobe` = `jobe_nomen`.`jobe_nomen_rn_jobe`)
and ((aobjectrun_rn = 0) Or (aobjectrun_rn = `object_run`.`object_run_rn`))
and ((aobject_rn = 0) Or (aobject_rn = `object_run`.`object_run_rn_object_header`))
and ((ajobe_rn = 0) Or (ajobe_rn = `object_run`.`object_run_rn_jobe`))
and ((aaddress_pod_rn = 0) Or (aaddress_pod_rn = `object_run`.`object_run_rn_address_pod`)))
)
LEFT JOIN
`doc_body`
ON
(((`doc_body`.`doc_body_dop1` = `object_run`.`object_run_rn`)
AND (`doc_body`.`doc_body_rn_nomen` = `jobe_nomen`.`jobe_nomen_rn_nomen`)))
)
INNER JOIN
`nomens`
ON
((`nomens`.`nomen_rn` = `jobe_nomen`.`jobe_nomen_rn_nomen`)
and ((anomen_rn = 0) Or (anomen_rn = `jobe_nomen`.`jobe_nomen_rn_nomen`)))
)
INNER JOIN
`units`
ON
((`units`.`units_rn` = `nomens`.`rn_units`))
)
WHERE
((aIsNull = 0) Or (`doc_body`.`doc_body_count` > 0))
ORDER BY
`object_run_rn_object_header` ASC,
`object_run_rn_address_pod` ASC,
`object_run_rn_jobe` ASC,
`jobe_nomen_number` ASC
;

END;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложный запрос!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]