我正在编写一个查询,以分析来自调查回复的某些数据,并将用户输入映射到一个整数列,如果调查受访者未回答问题,则该列可以为null。查询看起来像这样:
SELECT
(CASE
WHEN some_user_text = 'Yes' THEN 1
WHEN some_user_text = 'No' THEN 0
WHEN some_user_text = 'Unknown' THEN NULL
WHEN some_user_text IS NULL THEN NULL END)
FROM survey_data_table
我希望,如果我不提供ELSE
子句,那么MySQL将以某种方式出错,因此我知道需要调整查询以处理更多情况。在这种情况下,MySQL实际上似乎只返回NULL
。
我已经考虑过使用ELSE 'asdf'
,以便它尝试将字符串插入tinyint
字段中。看来它将“起作用”,但感觉就像是被黑客入侵。这也意味着,对于varchar
字段,我需要ELSE 'foo'
的字符串长于允许的限制,这感觉像是一个丑陋的黑客。
我已经考虑编写更多代码以确保该列中的值与期望的设置相匹配,但是...要编写和维护的代码也更多。
是否有一种简便而又好的方法?
答案 0 :(得分:0)
这就是我要做的:
--pseudo code, I don't guarantee this is MySQL syntax for creating a table and inserting 3 rows
Create table surveydecode(answertext varchar(1000), mapvalue int);
insert into surveydecode values(('yes', 1),('no',0),('unknown',null));
SELECT
mapvalue,
CASE WHEN sd.answertext IS NULL THEN sa.some_user_text AS undecodedvalue
FROM
surveyanswers sa
LEFT JOIN
surveydecode sd
ON
sa.some_user_text = sd.answertext
现在有了这个
insert into surveydecode values ('maybe',2)
)undecodedvalue
都位于顶部/底部