Mysql错误Operand should contain * column解决办法 | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

Mysql错误Operand should contain * column解决办法

点滴 admin 9年前 (2016-03-07) 2638次浏览 已收录 扫描二维码

使用了sql语句处理某些内容。当执行某个语句时,Mysql报错误:Operand should contain 1 column


字面意思是,需要有1个数据列。

我的sql语句类似这样:

update cdtable set cdcontent=’cd is a good boy’ where id in(

select * from(

select * from cdtable where cdtype in(1,2,3) order by id desc limit 100

)as cd

)

虽然错误的字面意思是缺少列,但是究竟是哪里缺少了列呢?

经过测试,发现是在加上最外层的sql语句之后报的错

仔细看了一下语句,发现在上面语句的蓝色部分“where id in(~~~)”,子查询使用了(select * ~~)子查询得到的是不止一列的数据记录

而很明显,where id in 需要的条件数据是一个列,问题就发生在这里啦

解决的方法是:把where id in(~~)括号内的第一层子查询的“*”改成“id”即可,改后的句子就像:

update cdtable set cdcontent=’cd is a good boy’ where id in(

select id from(

select * from cdtable where cdtype in(1,2,3) order by id desc limit 100

)as cd

)

Every
derived table must have its own alias

这句话的意思是说每个派生出来的表都必须有一个自己的别名

一般在多表查询时,会出现此错误。

因为,进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名

把MySQL语句改成:select
count(*) from (select * from ……) as total;

问题就解决了,虽然只加了一个没有任何作用的别名total,但这个别名是必须的

 

 

select name1 name, java, jdbc, hibernate,total
  from (select sc1.name name1, sc1.mark java
   from student_course2 sc1
   where sc1.course=’java’) as a,
   (select sc2.name name2,
sc2.mark jdbc

   from student_course2 sc2
   where sc2.course=’jdbc’) as b,
   (select sc3.name name3,
sc3.mark hibernate

   from student_course2 sc3
   where sc3.course=’hibernate’) as c,
 (select sc4.name name4,sum(sc4.mark) total
 from student_course2 sc4 group by sc4.name) as d
  where
name1=name2 and name2=name3 and name3=name4 order by total ASC;

 

结果正确:

+———-+——+——+———–+——-+
|
name 
    | java | jdbc | hibernate | total |
+———-+——+——+———–+——-+
| wangwu    40
  30
       20 |    90
|

|
lisi 
     70
  60
       50 |   180 |
| zhangsan |  100
  90
       80 |   270 |
+———-+——+——+———–+——-+
3 rows in set (0.02 sec)

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。