- ベストアンサー
カラムの値を、条件により動的に決定する方法
単一レコード内において、 Bの値を条件により決定したいのですが可能でしょうか。 <構成> テーブル:hoge カラム:A,B <条件> Aにデータがあれば、Bは"●" Aにデータがなければ、Bは"×" よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Bがカラムとして存在しなければいけない理由は何でしょう? selectするときにifでデータを作るとか、viewでBカラムに相当するデータを動的に生成するとかではダメなのでしょうか。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>AはNULLを許容していません。 >空文字("")がデータが無い状態となります。 であればこんな感じ? UPDATE hoge SET B=IF(A='','×','●'); なお、Aが変更されるたびにBの値を書き変えないと整合性がとれないため 運用時にトリガーなどで調整する必要があるかもしれません。
補足
>UPDATE hoge SET B=IF(A='','×','●'); アップデート文を使わず、自動で変更はできないでしょうか? 例えば、 INSERT INTO hoge (A) VALUES('aaa'); とした場合 A:'aaa' B:'●' が入っている状態にしたいです。 すみませんが、よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
カラムAの型と、NULLを許諾するかどうかによります。 そもそも「データがあれば」というのはどういう状態を前提にしていますか? Aが数値型でNULLを許諾してなければ、データがないということはありえません。 またAが文字列型でNULLを許諾していない場合''であるものをデータがないと 解釈すべきかどうか判断がわかれます 逆にNULLを許諾していてNULLをもってデータがないという認識であれば is nullでチェックができますが、SQLにとってNULLは弊害が多いため あまりお勧めできない状態になるかもしれません。
補足
>そもそも「データがあれば」というのはどういう状態を前提にしていますか? AはNULLを許容していません。 空文字("")がデータが無い状態となります。 すみませんが、よろしくお願いします。
お礼
回答にあるとおりif文で、制御を掛けことになりました。 上司に、指示を受けたのですが、 上司の「やりたいこと」はできないようです。 ご回答ありがとうございました。