我刚开始思路是在sql语句,把startDateStr根据逗号分隔成多个日期格式的数组,再用sql关键字in进行判断,但是对sql的分隔、数组不熟,搞了半天都没有成功,后来直接问同事,他一下子就写出来了...自己果然经验不够啊。没错,是用EXISTS关键字。
SELECT * FROM A a WHERE EXISTS( SELECT 1 FROM B b WHERE b.startDateStr like '%' || to_char(a.startDate,'yyyy-mm-dd') || '%');@H_404_4@ 思路也就是类似以下的sql: @H_404_4@
SELECT * FROM A a WHERE a.startDate IN (SELECT b.startDateStr FROM b);@H_404_4@ Oracle中in和exists的选择: @H_404_4@ 然后搜索了一些资料,关于Oracle中in和exists的选择,主要是效率的比较。 @H_404_4@ 1.子查询结果集小,用IN @H_404_4@ 2.外表小,子查询表大,用EXISTS @H_404_4@ @H_404_4@ 简单说明: @H_404_4@ a表的数据小,b表数据大时用exists。a为外表(也为主表) @H_404_4@
SELECT * FROM a WHERE EXISTS( SELECT 1 FROM b WHERE a.employee_id=b.employee_id);@H_404_4@ b表数据量小(子表)时,用in。
SELECT * FROM a WHERE a.employee_id IN (SELECT b.employee_id FROM b);原文链接:https://www.f2er.com/oracle/213638.html