sql子查询!基本 sql 查询中 ANY 运算符的问题。不知道为啥在我的查询中需要它以及它将如何工作?
Posted
技术标签:
【中文标题】sql子查询!基本 sql 查询中 ANY 运算符的问题。不知道为啥在我的查询中需要它以及它将如何工作?【英文标题】:sql subqueries! problem with ANY operator in basic sql query. dont know why it is required in my query and how will it work?sql子查询!基本 sql 查询中 ANY 运算符的问题。不知道为什么在我的查询中需要它以及它将如何工作? 【发布时间】:2020-04-12 18:14:55 【问题描述】:我收到以下错误
标量子查询包含多于一行; SQL语句:select * from trip where price= (select price from hike_trip ); [90053-193]
从 SQL
SELECT *
FROM trip
WHERE price = (
SELECT price
FROM hiking_trip
);
我知道如果在=
之后将ANY
添加到我的代码中,错误就会消失。但我不明白为什么它不起作用?它不应该给我等于给定条件的价格吗?为什么ANY
会成功?
更新:我明白了你告诉我的意思,但后来
选择 * 来自国家 存在于哪里 ( 选择 * 从山 在哪里 mountain.country_id=country.id );
在这个查询中,子查询中的 select *statement 不会返回超过一行或一列,但它在这里工作吗??
【问题讨论】:
'=' 运算符希望子查询返回一行。如果子查询返回多于 1 行,请使用“IN”运算符。 【参考方案1】:这是因为子查询SELECT price FROM hiking_trip
返回多行。
您需要使用IN
而不是=
才能工作。
SELECT * FROM trip WHERE price IN ( SELECT price FROM hiking_trip );
【讨论】:
【参考方案2】:这是因为您的子查询返回不止一行。
您可以使用IN
代替=
SELECT * FROM trip WHERE price IN ( SELECT price FROM hiking_trip );
或者你可以使用LIMIT
SELECT * FROM trip WHERE price = (SELECT price FROM hiking_trip LIMIT 1)
这将使用第一行过滤子查询结果
【讨论】:
【参考方案3】:这失败了,因为=
期望比较的单个值,而不是select
返回的值列表。从技术上讲,它需要一个标量子查询——一个返回 1 列和 0 或 1 行的子查询。
您可以通过多种方式解决语法问题。
使用聚合返回一个值:
WHERE trip.price = ( SELECT MAX(price) FROM hiking_trip )
使用limit
返回一个值:
WHERE trip.price = (SELECT price FROM hiking_trip LIMIT 1)
使用in
匹配任意值:
WHERE trip.price IN (SELECT price FROM hiking_trip)
使用any
:
WHERE trip.price = ANY (SELECT price FROM hiking_trip)
【讨论】:
@丹尼尔。 . .谢谢。以上是关于sql子查询!基本 sql 查询中 ANY 运算符的问题。不知道为啥在我的查询中需要它以及它将如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询