我重構一些舊代碼,並偶然發現了這個命名查詢。 (它使用Hibernate在MySQL的頂部):爲什麼要使用COALESCE()在sql語句
delete F from
foo F
inner join user DU on F.user_id = DU.id
where
(COALESCE(:userAlternateId,null) is null or DU.alternate_id like :userAlternateId)
and (COALESCE(:fooId,null) is null or F.foo_id like :fooId)
and (
(COALESCE(:fromUpdated,null) is null or F.updated_at>=:fromUpdated)
and (COALESCE(:toUpdated,null) is null or F.updated_at<=:toUpdated)
)
我不明白爲什麼這個COALESCE正在使用這種方式: COALESCE(:userAlternateId,null)爲空
這是一個性能破解或它使查詢數據庫獨立或...?
BTW userAlternateId是一個字符串/ VARCHAR,其它ID是多頭和對日期有
SQL有什麼特色? – slugster 2010-09-30 11:21:30
@slugster他說MySQL(第一段) - 除非這是Hibernate HQL? – Rup 2010-09-30 11:22:58
啊,當然......我太忙了,看着SQL來注意到這一點。將null歸結爲null使我分心。 – slugster 2010-09-30 11:31:16