1

私はmysqlクエリを持っていました:

Select count(*) as cnt from  page06 where dl = 1 and TYPE = 'mempage' union 
Select count(*) as cnt from  page06 where err = 1 and TYPE = 'mempage' union  
Select count(*) as cnt from  page06 where dl = 1 and err=1 and TYPE = 'mempage'

ほとんどの場合dlerr列は0であるため、最後の2つの選択はを返し0ます。このクエリは、私が期待したものではないものだけを返すことがわかりました。私はこの解決策を見つけました:

Select count(*) as cnt,'s' as p from  page06 where dl = 1 and TYPE = 'mempage' union 
Select count(*),'d' as p  from  page06 where err = 1 and TYPE = 'mempage' union  
Select count(*),'f' as p   from  page06 where dl = 1 and err=1 and TYPE = 'mempage'

このクエリは完全に機能しますが、私は最初の形式でコードを記述しました。なぜこれが起こるのか知りたいのですが、この問題を解決するための解決策はありますか(私が言ったことを除いて)?
私が自分のソリューションを使用したくない理由は、変更したくない(または変更できない)クエリがたくさんあるからです。私が探しているのは、接続に設定するオプションの王様です(のように set names 'latin1';

4

1 に答える 1

3

UNION ALLの代わりに使用UNION

違いの詳細な説明については、この投稿を確認してください: UNION と UNION ALL の違いは何ですか?

SELECT count(*) AS cnt FROM  page06 WHERE dl = 1 AND TYPE = 'mempage' UNION ALL
SELECT count(*) AS cnt FROM  page06 WHERE err = 1 AND TYPE = 'mempage' UNION ALL
SELECT count(*) AS cnt FROM  page06 WHERE dl = 1 AND err=1 AND TYPE = 'mempage'
于 2012-07-17T20:42:25.987 に答える