2017-04-26 8 views
2

私はSELECT COUNT(*) AS 'columnName' ...のように始まる複雑な文字列を持っています。結果には正または0が表示されます。私が欲しいのは、0の場合です.string1(0ではなく)を印刷し、0よりも高い場合は、その番号の代わりにstring2を印刷します。注意点は、条件文を使用したくないということです.ifまたはcaseはありません。私は置換機能について考えてきましたが、私はそれが動作するとは思わない。その後、VIEW(結果を格納する仮想テーブル?)が機能するでしょうか?元のテーブルデータを変更したくない場合は、出力を操作したいだけです。私はそれを理解できません、私はSQLの初心者です。助けて?MYSQL - 0を文字列に置き換え、0以外の文字列をSQLクエリ出力に出力します。

+3

初心者の方は 'CASE'を使うべきです。それは正しいアプローチです。さらに、' count(*)はほとんど0を返しません。 –

+0

あなたのカウントをvarcharにキャストして置き換えます本当に置き換えたい場合 – maSTAShuFu

答えて

3
select COALESCE((select 'string1' as s 
        from table1 
        having count(*) < 0) 
       ,'string2') 

が文字列1を返します。文字列2

+0

これはまさに私が望んでいたものです。私は 'COALESCE'キーワードについて知りませんでした。ありがとう! –

+0

これは完璧な批判ではありませんvあなたが望んだことであるという事実は、質問の前提に欠陥があるように思えます。 @ RestlessC0bra、あなたはこれが*正確に* SELECTと同じものであることを認識していないように見えます(SELECT 1はテーブル1を持ちます(*)<0)IS NOT NULL THEN 'string1' ELSE 'string2' END; '(または任意の数の類似した構成要素)。論理的に有効で一般的にははるかに直感的であるため、条件式を避ける理由はありません。例えば 'SELECT IF(EXISTS(SELECT * FROM table1) '、' string1 '、' string2 ');' –

+0

@ Michael-sqlbot欠陥。これは私が欲しかったことと私が書いたことです。はい、私は同意します。 –

2

正しいアプローチはCASEを使用することですが、他の方法があります:

select elt(1 + least(count(*), 1), 'string1', 'string2') 

count(*)はほとんど0を返すことはありません。そこにはgroup byされていないと、テーブルが行を持っていない(またはすべての行がwhereによってフィルタリングされている場合にのみ0を返します。それが返す他のテーブルにレコードがない場合は、クエリの上

関連する問題