co-hey訂正:2010/04/09通りすがりさんにコメントを頂き、UNIONで連結した全体にhavingをかけるのはできないということで正しいということが分かりました。$select2の方にだけhavingでフィルターされるデータがあったため、結果的に意図通りのデータが出力されただけで、全体にhavingが掛かっているわけではありませんでした。サブクエリを使う方法が適切です。$adapterはZend_Db_Adapterのクラス。←havingで書いてた条件=========UNIONとHAVINGを同時に使うSQLを組んでいたときに、Zend_Db_Selectから生成されたSQLからHAVING句が抜け落ちていました。プログラムは以下のようなものです。$adapterはZend_Db_Adapterのクラス。HAVING句がなくなってる上記でできるSQLのイメージは、これです。.....このSQLをDBサーバで実行すると、動くので構文はあってます。そこで、Zend_Db_Selectクラスのhaving句を出力するところを見たら、こうなってました。}FROM句とHAVING句が両方ある場合に、HAVINGをつけるって処理ですね。確かにこれだと、UNIONと同時に使ったときは、FROM句がないので、HAVING句がつかないのは納得です。いうわけで、以下のように修正して、UNIONとHAVINGが同時に使えることを確認しました。}そのうちZend本体でも実装してくれることに期待します。.....RDBMSの実装にもよるのかもしれませんが、MySQLだとこのSQLは$select2に対するhavingと解釈されますね。同じ結果を得るにはこんな感じになるんじゃないかと。JOINをUNIONするかUNIONしてからサブクエリを使うか、どちらかだろうと思いますがいかがでしょう。AM2010/04/09>通りすがりさんコメントありがとうございます。UNIONした結果にHAVINGしているつもりでしたが、通りすがりさんのおっしゃる通り、$select2にだけHAVINGでフィルターされるデータが入っていて、意図通りのデータが出力されていたようでした。UNIONの結果をさらに絞り込むときは、書いていただいたようにサブクエリを使うやり方が適切だと思います。ありがとうございました。勘違いしたままでいるところでした。コメントは受け付けていません。WordPress%d人のブロガーが「いいね」をつけました。