|
|
|
Сложный запрос!
|
|||
|---|---|---|---|
|
#18+
Всем привет, и спасибо за ранее ответ! Есть следующие таблицы 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, но работает медленно. Может поможет кто нибудь правильно составить запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 00:39:40 |
|
||
|
Сложный запрос!
|
|||
|---|---|---|---|
|
#18+
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. Но как сделать что бы, в запросе присутствовали и другие строки из jobe_nomen с указанным jobe_id, попробывал все и RIGHT OUTER JOIN, единственно что получилось так это: сначало сделал LEFT OUTER JOIN затем UNION и RIGHT OUTER JOIN, но работает медленно. Может поможет кто нибудь правильно составить запрос если то, что получилось - устраивает, то это FULL JOIN которого в МуСКЛ нет, и "эмулируется" он именно так, а "медленно" - план смотри, и индексами занимайся зы и так, "природней" как-то смотрится, имхо Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 01:24:18 |
|
||
|
Сложный запрос!
|
|||
|---|---|---|---|
|
#18+
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 01:16:50 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1836271]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 311ms |

| 0 / 0 |
