更改+命令为+领导
Change + ordered to + leading
我正在尝试找到最有选择性的标准来开始加入 SQL。
我试过这个:
SELECT /*+ ordered */
r3.object_id
FROM nc_references src
INNER JOIN nc_objects o ON o.object_type_id = 9146598858613093106
AND o.object_class_id = 90000330
AND src.object_id = o.object_id
AND src.reference = 9155224548713314821
AND src.attr_id = 90100080
INNER JOIN nc_params p ON ( p.list_value_id = 90100071 OR p.list_value_id = 90100072 )
AND p.object_id = o.object_id
AND p.attr_id = 90100070
INNER JOIN nc_po_actions poa ON poa.manual_task_id = o.object_id
INNER JOIN nc_po_tasks pot ON pot.task_id = poa.task_id
INNER JOIN nc_references r1 ON r1.object_id = pot.container_id
AND r1.attr_id = 9145923960313063683
INNER JOIN nc_references r2 ON r2.object_id = pot.container_id
AND r2.attr_id = 9145685312013687931
INNER JOIN nc_references r3 ON r2.reference = r3.object_id
AND r3.attr_id = 9145065302013613216
AND r1.reference = r3.reference
;
但是这个 + ordered
已被弃用。如何使用 + leading
?
实现此查询
使用前导提示并按照您希望数据库加入它们的顺序将 table 别名放在括号之间,例如:
SELECT /*+ leading(src o p poa) */
r3.object_id
FROM nc_references src
INNER JOIN nc_objects o ON o.object_type_id = 9146598858613093106
AND o.object_class_id = 90000330
AND src.object_id = o.object_id
AND src.reference = 9155224548713314821
AND src.attr_id = 90100080
INNER JOIN nc_params p ON ( p.list_value_id = 90100071 OR p.list_value_id = 90100072 )
AND p.object_id = o.object_id
AND p.attr_id = 90100070
INNER JOIN nc_po_actions poa ON poa.manual_task_id = o.object_id
INNER JOIN nc_po_tasks pot ON pot.task_id = poa.task_id
INNER JOIN nc_references r1 ON r1.object_id = pot.container_id
AND r1.attr_id = 9145923960313063683
INNER JOIN nc_references r2 ON r2.object_id = pot.container_id
AND r2.attr_id = 9145685312013687931
INNER JOIN nc_references r3 ON r2.reference = r3.object_id
AND r3.attr_id = 9145065302013613216
AND r1.reference = r3.reference
;
这会告诉数据库从 src (nc_references) 开始,然后是 o (nc_objects),等等
我正在尝试找到最有选择性的标准来开始加入 SQL。
我试过这个:
SELECT /*+ ordered */
r3.object_id
FROM nc_references src
INNER JOIN nc_objects o ON o.object_type_id = 9146598858613093106
AND o.object_class_id = 90000330
AND src.object_id = o.object_id
AND src.reference = 9155224548713314821
AND src.attr_id = 90100080
INNER JOIN nc_params p ON ( p.list_value_id = 90100071 OR p.list_value_id = 90100072 )
AND p.object_id = o.object_id
AND p.attr_id = 90100070
INNER JOIN nc_po_actions poa ON poa.manual_task_id = o.object_id
INNER JOIN nc_po_tasks pot ON pot.task_id = poa.task_id
INNER JOIN nc_references r1 ON r1.object_id = pot.container_id
AND r1.attr_id = 9145923960313063683
INNER JOIN nc_references r2 ON r2.object_id = pot.container_id
AND r2.attr_id = 9145685312013687931
INNER JOIN nc_references r3 ON r2.reference = r3.object_id
AND r3.attr_id = 9145065302013613216
AND r1.reference = r3.reference
;
但是这个 + ordered
已被弃用。如何使用 + leading
?
使用前导提示并按照您希望数据库加入它们的顺序将 table 别名放在括号之间,例如:
SELECT /*+ leading(src o p poa) */
r3.object_id
FROM nc_references src
INNER JOIN nc_objects o ON o.object_type_id = 9146598858613093106
AND o.object_class_id = 90000330
AND src.object_id = o.object_id
AND src.reference = 9155224548713314821
AND src.attr_id = 90100080
INNER JOIN nc_params p ON ( p.list_value_id = 90100071 OR p.list_value_id = 90100072 )
AND p.object_id = o.object_id
AND p.attr_id = 90100070
INNER JOIN nc_po_actions poa ON poa.manual_task_id = o.object_id
INNER JOIN nc_po_tasks pot ON pot.task_id = poa.task_id
INNER JOIN nc_references r1 ON r1.object_id = pot.container_id
AND r1.attr_id = 9145923960313063683
INNER JOIN nc_references r2 ON r2.object_id = pot.container_id
AND r2.attr_id = 9145685312013687931
INNER JOIN nc_references r3 ON r2.reference = r3.object_id
AND r3.attr_id = 9145065302013613216
AND r1.reference = r3.reference
;
这会告诉数据库从 src (nc_references) 开始,然后是 o (nc_objects),等等