SQL错误1222列数不同

时间:2014-05-13 14:08:35

标签: sql

嘿,我一直收到错误1222"使用过的select语句有不同数量的coloumns。我发现错误在本节

JOIN
 ( SELECT 3 snpos,x.name fa1,x.mass mz_fa1,x.catoms catomsfa1,x.dbnum dbnumfa1,y.name fa2,y.mass mz_fa2,y.catoms catomsfa2,y.dbnum dbnumfa2,z.name fa3,z.mass mz_fa3,z.catoms catomsfa3, z.dbnum dbnumfa3, x.mass+y.mass+z.mass total, x.catoms+y.catoms+z.catoms totcatoms, x.dbnum+y.dbnum+z.dbnum totdbnum FROM ms2frag x JOIN ms2frag y ON y.id <= x.id JOIN  ms2frag z ON z.id <= y.id
   UNION ALL
   SELECT 2      ,x.name fa1,x.mass mz_fa1,x.catoms catomsfa1,x.dbnum dbnumfa1,y.name fa2,y.mass mz_fa2,y.catoms catomsfa2,y.dbnum dbnumfa2, x.mass+y.mass total, x.catoms+y.catoms totcatoms, x.dbnum+y.dbnum totdbnum FROM ms2frag x JOIN ms2frag y ON y.id <= x.id
   UNION ALL
   SELECT 1,x.name fa1,x.mass mz_fa1, x.catoms catomsfa1, NULL,0,NULL,0, mass, catoms FROM ms2frag
 ) ms2frag

所以只是解释一下,如果snpos = 3或2或1,必须选择以下哪一行。

代码的其他部分有效,只有这部分没有。

2 个答案:

答案 0 :(得分:6)

使用UNION时,必须确保每个语句返回相同数量的列。在您的示例中,每个查询返回不同数量的列,但不起作用。

答案 1 :(得分:0)

要使用Union,您必须为其中的所有select语句提供相同数量的列。很明显,你在fisrt和第三选择中有不同的列数。此外,相应列中的列类型必须隐式转换为彼此。