我在mysql中有两个表,如下所示:
Table1
持有问题
qid tid qtype
101 1 1
102 1 2
103 1 3
104 1 4
此处qtype
是问题类型,其中qtype
1和2接受数字值,3和4接受字符串。我已将qtype
声明为varchar
列。
表2包含答案
sid qid qtype qanswer
1 101 1 10
1 102 2 20
1 103 3 o1
1 104 4 o2
每个问题都有一行代表#sid'
我使用以下查询以下面的方式选择了数据:
select a.sid, MAX(CASE WHEN (a.qid = 101) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '101' ,
MAX(CASE WHEN (a.qid = 102) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '102' ,
MAX(CASE WHEN (a.qid = 103) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '103' ,
MAX(CASE WHEN (a.qid = 104) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '104' from Table2 a join Table1 b on a.qtype = b.qtpe where b.tid = 1
sid 101 102 103 104
1 10 20 o1 o2
2 30 15 o2 o1
我想选择qtype
1和2作为整数,所以我在查询中使用了以下语句:
if(qtype in (1,2),cast(qanswer as unsigned),qanswer)
根据需要,我没有得到qtype
1和2的答案。
我参考了这个question
我也试过convert
而不是演员,但结果相同。
如何将qtype
1和2转换为整数?
如何从mysql表达式返回整数值。
答案 0 :(得分:0)
这不是语句:
if(qtype in (1, 2), cast(qanswer as unsigned), qanswer)
这是表达式。表达式返回单个类型的标量值。 MySQL需要确定返回的类型是unsigned
还是varchar
,因为它必须为整个表达式选择一个。
MySQL似乎是选择字符串类型。