我在 MySQL 和 MSSQL 方面有更多经验,但我不认为自己是 SQL 专家。
我需要在 Oracle 数据库上运行一些 SQL 工作。甚至还不确定版本,但它应该是最近的(10、11??)。
无论如何,我必须计算跨越两个表的不同记录的数量。为了争论起见,我们称它们为master
and detail
。
以下 SQL 为我提供了我想要的数据。但是,此 SQL 最终将被放入 UDF(或 Oracle 等价物)中。但我的问题是,有没有更好的方法?要么使用一些高级的 Oracle 优化,甚至只是一个更好的 SQL 查询。
谢谢
select count(*) from
(
select
mas.barcode
, det.barcode_val
from mas
inner join det on (det.trans_id = mas.trans_id and mas.trans_sub_id = det.trans_sub_id)
where
mas.trans_id = 12345
and det.code_type = 'COMMODORE'
group by
mas.barcode
, det.barcode_val
);
数据:
MAS
trans_id trans_sub_id barcode
-------------------------------------
12345 1 COM_A
12345 2 COM_A
12345 3 COM_B
DET
trans_id trans_sub_id code_type barcode_val
-------------------------------------------------------
12345 1 COMMODORE C64
12345 1 COMMODORE C64
12345 1 TANDY TRASH80
12345 2 COMMODORE C128
12345 2 ATARI 800XL
12345 2 COMMODORE AMIGA500
12345 3 COMMODORE C64
Results before count
--------------------
COM_A C64
COM_A C128
COM_A AMIGA500
COM_B C64
Results after count
-------------------
4