CROSS JOIN 是 SQL 中用于执行笛卡尔积(Cartesian product)的一种连接操作。它会将左表的每一行与右表的每一行进行组合,生成的结果集的行数等于左表的行数乘以右表的行数。
举个例子,如果表 A 有 m 行,表 B 有 n 行,那么执行 CROSS JOIN 操作后得到的结果将会有 m * n 行。
在实际使用中,CROSS JOIN 往往会导致非常大的结果集,因此在大多数情况下,应该避免使用它。在前面的 SQL 查询中,我使用 CROSS JOIN 来将子查询的结果引入到主查询中,以避免在每一行中执行子查询,以提高查询性能。
请优化这个sql语句
select top 10 '1.2.3.4.'+st.study_uid as 文档Id FROM dbo.patient1 A(NOLOCK),dbo.study1 stinner join dbo.ris_request b on st.accession_number=b.accession_numberinner join dbo.ris_patient c on b.patientid=c.patientidWHERE ST.ptn_id_id=a.ptn_id_id and st.STUDY_TIME is not null--and a.birth_date<>''and b.stateid='60'and st.study_uid_id >=(SELECTMAX(study_uid_id)
FROMdatax_status_time
)ORDER BY st.study_uid_id
SELECT TOP 10 '1.2.3.4.' + st.study_uid AS 文档Id
FROM dbo.patient1 A WITH (NOLOCK)
INNER JOIN dbo.study1 st ON ST.ptn_id_id = a.ptn_id_id
INNER JOIN dbo.ris_request b ON st.accession_number = b.accession_number
INNER JOIN dbo.ris_patient c ON b.patientid = c.patientid
CROSS JOIN (SELECT MAX(study_uid_id) AS max_study_uid_id FROM datax_status_time) max_study_uid
WHERE st.STUDY_TIME IS NOT NULL
AND b.stateid = '60'
AND st.study_uid_id >= max_study_uid.max_study_uid_id
ORDER BY st.study_uid_id;