(SELECT /*+ INDEX(BJ_P_GRP_TEN PK_BJ_P_GRP_TEN) */ TENBAN_FROM, TENBAN_TO FROM BJ_P_GRP_TEN WHERE GRP_ID = ?) TEN
时间: 2025-09-04 10:12:59 AIGC 浏览: 12
SQL 子查询 `(SELECT /*+ INDEX(BJ_P_GRP_TEN PK_BJ_P_GRP_TEN) */ TENBAN_FROM, TENBAN_TO FROM BJ_P_GRP_TEN WHERE GRP_ID = ?) TEN` 的含义和作用如下:
#### 含义
该子查询从 `BJ_P_GRP_TEN` 表中筛选出 `GRP_ID` 等于指定值(由占位符 `?` 表示)的记录,并选取这些记录中的 `TENBAN_FROM` 和 `TENBAN_TO` 两列数据。`/*+ INDEX(BJ_P_GRP_TEN PK_BJ_P_GRP_TEN) */` 是 Oracle 数据库的提示(hint),用于告诉查询优化器在执行该子查询时使用 `BJ_P_GRP_TEN` 表上名为 `PK_BJ_P_GRP_TEN` 的索引,以提高查询效率。子查询的结果被命名为 `TEN`,作为一个临时表在主查询中使用。
#### 作用
在主查询中,子查询 `TEN` 的作用是提供一个筛选条件的范围。主查询从 `BJ_T_HAT_QUETBL` 表中选取记录,通过 `QUE.TENBAN_HEAD >= TEN.TENBAN_FROM AND QUE.TENBAN_HEAD <= TEN.TENBAN_TO` 这个条件,筛选出 `TENBAN_HEAD` 值在子查询所提供的 `TENBAN_FROM` 和 `TENBAN_TO` 范围内的记录。这样可以根据特定分组(由 `GRP_ID` 确定)的范围来筛选主表中的数据。
以下是包含该子查询的完整 SQL 示例:
```sql
SELECT
/*+ LEADING(TEN QUE) USE_NL(TEN) FULL(QUE) BJ_T_HAT_QUETBLDao_001 */
'1' as QUE_KBN,
TRN_FILE_ID,
REC_RGST_DT
FROM
BJ_T_HAT_QUETBL QUE,
(SELECT /*+ INDEX(BJ_P_GRP_TEN PK_BJ_P_GRP_TEN) */ TENBAN_FROM, TENBAN_TO FROM BJ_P_GRP_TEN WHERE GRP_ID = ?) TEN
WHERE
QUE.TENBAN_HEAD >= TEN.TENBAN_FROM
AND QUE.TENBAN_HEAD <= TEN.TENBAN_TO
AND QUE.PROC_FLG = '0';
```
阅读全文