sql 子查询返回的值不止一个怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 子查询返回的值不止一个怎么解决?相关的知识,希望对你有一定的参考价值。

参考技术A

解决方法如下:

返回一个值:返回多个说明数据库中满足用户查询条件的记录有多个,要返回一个就说明用户的查询条件不够,再加条件控制就行了,比如在语句末尾再加 and ***=‘***’;

如果用户问的是如何在后台程序中接收的话,用List可以,一个节点接收Result的一行值,读取的时候遍历List就行了。

扩展资料:

删除表

drop table tabname--这是将表连同表中信息一起删除但是日志文件中会有记录

删除信息

delete from table_name-这是将表中信息删除但是会保留这个表

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1[separator]

参考资料来源:百度百科-sql语句

参考资料来源:百度百科-SQL语句大全

SQL之子查询

子查询概念:把一个查询的结果在另一个查询中使用就叫做子查询

1.子查询作为条件时

当我们使用子查询作为条件时,若子查询返回值为多个,则会报以下错误:

"子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。"

此时我们应该使用范围【in】关键字来解决。

2.子查询的分类

  a.独立子查询:可以独立来执行的查询语句做子查询使用

  b.相关子查询:子查询使用了父查询中的列

3.子查询的使用方式

  a.子查询作为条件使用:当父查询需要某个值,就可以用子查询给出。

  b.子查询作为列的值

select ClassName from MyClass where ClassId=1
select StudentName,Gender,(select ClassName from MyClass where ClassId=1) from Student where ClassId=1

我们使用第一行代码作为列值,现在代码为正确的写法,但会有其他两种出错的写法。

i.

select StudentName,Gender,(select ClassName from MyClass) from Student where ClassId=1

由于没有写限定条件,子查询将返回一列多行多个值,会有如下报错:

j.

select StudentName,Gender,(select * from MyClass) from Student where ClassId=1

由于*代表了一行多列值,会有以下报错:

  c.子查询作为结果集

i.

使用子查询结果集实现分页:

select top 3 *from Student--第一页
select top 3*from Student where StudentId not in(select top 3 StudentId from Student)--第二页

在这里我们先选择了第一页,一共三条数据,然后使用第一页的结果集作为第二页的查询条件,得出第二页不在这三条结果范围外的前三条结果。

j.

我们还可以使用ROW_NUMBER来实现分页效果,此函数为数据集提供一个连续的编号,我们用这些编号来实现分页。

select *,ROW_NUMBER()over(order by studentid) as id from Student
select *from(select *,ROW_NUMBER()over(order by studentid) as id from Student) as temp where id>0 and id<=5
select *from(select *,ROW_NUMBER()over(order by studentid) as id from Student) as temp where id>5 and id<=10

 

以上是关于sql 子查询返回的值不止一个怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

SQL问题,子查询返回的值不止一个!

sql提示子查询返回的值不止一个,求解如何修改,谢谢。

子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,不允许?

sqlserver 表 无法更新和删除 子查询返回的值不止一个

子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作

SQL之子查询