toad对于外部连接的sql语句在写成( + )的情况下(有空格的情况下),格式化有BUG,以上看不全sql语句。我格式化如下:
SELECT COUNT (*)
FROM med_operation_master a, med_anesthesia_summary b
WHERE a.patient_id = b.patient_id(+)
AND a.visit_id = b.visit_id(+)
AND a.oper_id = b.oper_id(+)
AND b.patient_id IS NULL
AND oper_status > 2
AND a.anesthesia_doctor = :1
AND start_date_time > SYSDATE - 31
我第一次看的时候,感觉很奇怪,med_anesthesia_summary的主键中有patient_id,为什么要查询b.patient_id IS NULL
这样的条件出现,再细看才知道使用了外部连接。另外我前面一直没说一个问题,像oper_status,start_date_time的字段,前面没有a.,
b.的前缀,对于我开始不熟悉数据库,根本不知道这个字段是来自那个表,这个有一个适应的过程,不知道以后接手的程序员估计也会花一定的时间。
这个语句更好的写法应该这样。
SELECT COUNT (*)
FROM med_operation_master a
WHERE a.oper_status > 2
AND a.anesthesia_doctor = :1
AND a.start_date_time > SYSDATE - 31
AND NOT EXISTS (
SELECT NULL
FROM med_anesthesia_summary b
WHERE b.patient_id = a.patient_id
AND b.visit_id = a.visit_id
AND b.oper_id = a.oper_id);
另外我查询v$sql_bind_capture视图,发现:1参数都是汉字。