2016-08-30 13 views
0

このステートメントはエラーではありませんが、私はそれも望んでいた方法で電話内線番号を追加しません。CONCAT_WS内のCASEを使用するMySQL Statement

SELECT 
     est_contacts.*, 
     CONCAT_WS(
     ', ', 
     contacts.contact_name, 
     contacts.contact_phone, 
     (
      CASE contacts.contact_ext WHEN NOT '' THEN CONCAT('x', contacts.contact_ext) END 
     ), 
     contacts.contact_phone_type 
    ) AS contact 
    FROM 
     est_contacts 
    LEFT JOIN 
     contacts 
    ON 
     est_contacts.contact_id = contacts.contact_id 
    WHERE 
     est_contacts.est_id = 1 

これはそれで私の最初のショットだったので、それはそれまでは私が連絡先レコードに内線を追加し、それはdidntの、仕事するつもりだったし、それのように行動していたように、それが見えたCASEものとそうイムスーパー新それは

+0

あなたの場合には、他/ default句を持っていないので、1つの一致が発生しない場合は、何もまったく返されません。 –

+0

thats私が望んでいたことは、extを持っていなかった場合、私はCONCAT_WSにextを含めたくないということでした。電話番号が正しくフォーマットされているので、それを含めるだけでした。 –

答えて

1

NOT ''はこのようにロジックを書いてみたにも関わらず、それを追加します。

(CASE WHEN contacts.contact_ext <> '' THEN CONCAT('x', contacts.contact_ext) 
    END), 
+0

ok最初のショットで100%、あなたは少し答えを詳述できますか?私はそれがなぜ機能するのか理解できますか? –

+1

@ AlanDoyle: 'CASE x WHEN v'構文は、' x'と値 'v'を比較します。あなたの場合、 'v'は' NOT 'という表現で、空文字列は偽であるため論理否定は '1'です。したがって、あなたのバージョンは' CASE contacts.contact_ext WHEN 1 THEN ... 'と等価です。あなたが望むなら、あなたはCASE contacts.contact_ext WHEN '' THEN NULL ELSE ... 'を代わりに行うことができます。 – eggyal

+0

ああ、それは今より感謝します、ありがとう! –

関連する問題