Sql 按预查询记录中的属性查询(Oracle)
下面有一个表Sql 按预查询记录中的属性查询(Oracle),sql,oracle,nested-query,Sql,Oracle,Nested Query,下面有一个表MEETINGPARTICIPANT,主键是ORGID,MEETINGID和PARTICIPANTID Name Null? Type ------------------ -------- ------------- ORGID NOT NULL NUMBER(10) MEETINGID NOT NULL VARCHAR2(32) PARTICIPANTID NO
MEETINGPARTICIPANT
,主键是ORGID
,MEETINGID
和PARTICIPANTID
Name Null? Type
------------------ -------- -------------
ORGID NOT NULL NUMBER(10)
MEETINGID NOT NULL VARCHAR2(32)
PARTICIPANTID NOT NULL VARCHAR2(32)
EMPLOYEEID NOT NULL VARCHAR2(32)
DISPLAYNAME VARCHAR2(128)
EMAIL VARCHAR2(128)
JOINTIME NOT NULL DATE
LEAVETIME NOT NULL DATE
CREATETIME NOT NULL DATE
LASTMODIFIEDTIME NOT NULL DATE
第1步,按ORGID
、MEETINGID
和EMPLOYEEID
列出记录,获取记录列表
SELECT
*
FROM
MEETINGPARTICIPANT
WHERE
ORGID=#{orgId}
AND MEETINGID=#{meetingId}
AND EMPLOYEEID=#{employeeId}
步骤2,迭代步骤1的每条记录,通过步骤1的EMAIL
和DISPLAYNAME
再次搜索,合并到一个大记录列表
for (each record in step 1) {
SELECT
*
FROM
MEETINGPARTICIPANT
WHERE
ORGID=#{orgId}
AND MEETINGID=#{meetingId}
AND EMAIL=#{record.email} AND DISPLAYNAME=#{record.displayName}
Merge searched records to mergedRecords
}
步骤3,返回mergedRecords
问题是,如何将步骤1和步骤2中的SQL合并为单个SQL?下面的SQL似乎可以工作。
NVL(EMAIL,”)
和NVL(DISPLAYNAME,”)
将处理电子邮件或DISPLAYNAME为空的记录
SELECT
*
FROM
MEETINGPARTICIPANT
WHERE
ORGID=#{orgId}
AND MEETINGID=#{meetingId}
AND (NVL(EMAIL, ' '), NVL(DISPLAYNAME, ' ')) IN (
SELECT
NVL(EMAIL, ' '), NVL(DISPLAYNAME, ' ')
FROM
MEETINGPARTICIPANT
WHERE
ORGID=#{orgId}
AND MEETINGID=#{meetingId}
AND EMPLOYEEID=#{employeeId}
)