合并vs'的性能比较是空的'

时间:2017-06-13 12:27:28

标签: sql

select * from zzz t1
INNER JOIN yyy T2
on (T1.col1 = T2.col1 )
and (T1.col2 = T2.col2 or (T1.col2 is null and T2.col2 is null ) )

VS

select * from zzz t1
INNER JOIN yyy T2
on (T1.col1 = T2.col1 )
and (coalesce(T1.col2, '\0') = coalesce(T2.col2, '\0'))

或者,如果有第三种,更好的方法,我也会这样做。这是我发现自己经常做的事情,因为我们的一半数据库允许空值,而其中一半数据库没有这么比较。

唯一的问题是我需要避免不标准的事情,我使用了太多不同的dbs而且我努力摆脱所有这些并不支持的事情除非表现获得完全神奇。 (db2,oracle,sqlserver是我正在使用的主要部分)

1 个答案:

答案 0 :(得分:1)

如果数据库进行<?php //You have below array including all keys $result_array = array('logo'=>'test','state_id'=>125,'prelim_info'=>'','CLIxModule_Impl'=>'5','district_entry'=>3); // Now provide only those keys which you need to filter. $filter_keys = array('district_entry','state_id'); $filtered_array = array_filter($result_array, function ($key) use ($filter_keys) { return in_array($key, $filter_keys); }, ARRAY_FILTER_USE_KEY ); var_dump($filtered_array); ?> 安全比较,那么最好的方法是:

NULL

(这由DB2支持,但不支持Oracle或SQL Server。)

否则,我认为你的两个版本至少在大多数数据库中都是等价的。函数/ select * from zzz t1 join yyy T2 on (T1.col1 = T2.col1 ) and (T1.col2 is not distinct from T2.col2); 的使用限制了使用or索引的能力。