oracle,如何在连接子查询中使用外表列

问题描述 投票:0回答:1

给出下面的表格,我需要从

NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008
获取所有记录,并且每行从
NAT_DASH_AUD_ELEMENTO_WORKFLOW_007
获取

AuditData <= NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008.AuditData
and ID_ELEMENTO_008 = ID_007

使用 join 无法做到这一点,因为代码就是这样,并且不允许内部条件

select * from 

NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008
INNER JOIN
  (SELECT * FROM NAT_DASH_AUD_ELEMENTO_WORKFLOW_007
  WHERE 
    NAT_DASH_AUD_ELEMENTO_WORKFLOW_007.AuditData <= NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008.AuditData 
    AND ID_007 = ID_ELEMENTO_008
  ORDER BY NAT_DASH_AUD_ELEMENTO_WORKFLOW_007."AuditData" DESC
  fetch next 1 rows only)
ON ID_007 = ID_ELEMENTO_008

在选择中使用子查询时,我被迫仅选择一列

有没有一种 sql 标准方法可以做到这一点,而不会弄乱这个简单要求的对象或记录?

桌子:

CREATE TABLE "NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008" 
   (    "AuditId" NUMBER(9,0),
    "AuditAction" VARCHAR2(250 BYTE) ,
    "AuditUser" VARCHAR2(250 BYTE) ,
    "AuditData" TIMESTAMP (6), 
    "ID_008" NUMBER(12,0), 
    "ID_LINGUA_008" NUMBER(9,0), 
    "ID_ELEMENTO_008" NUMBER(9,0), 
    "NOTE_008" VARCHAR2(4000 CHAR)
)

CREATE TABLE "NAT_DASH_AUD_ELEMENTO_WORKFLOW_007" 
(   "AuditId" NUMBER(9,0) ,
    "AuditAction" VARCHAR2(250 BYTE) ,
    "AuditUser" VARCHAR2(250 BYTE),
    "AuditData" TIMESTAMP (6), 
    "ID_007" NUMBER(12,0), 
    "ID_STATO_ORIGINE_007" NUMBER(9,0), 
    "ID_STATO_DESTINAZIONE_007" NUMBER(9,0), 
    "NOTA_OBBLIGATORIA_007" NUMBER(1,0), 
    "ALLEGATO_OBBLIGATORIO_007" NUMBER(1,0), 
    "FINALE_007" NUMBER(1,0), 
    "ID_WORKFLOW_007" NUMBER(9,1)
)
sql oracle subquery
1个回答
0
投票

您可以检查此查询:

SELECT * 
FROM NAT_DASH_AUD_ELEMENTO_WORKFLOW_LOC_008 n8
INNER JOIN NAT_DASH_AUD_ELEMENTO_WORKFLOW_007 n7
ON n7.ID_007 = n8.ID_ELEMENTO_008
    AND n7.AuditData <= n8.AuditData
ORDER BY n7.ID_007, n7.AuditData DESC, n8.AuditData;  --ORDER BY...
© www.soinside.com 2019 - 2024. All rights reserved.