首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL中的两种语法有什么不同?

SQL中的两种语法有什么不同?
EN

Stack Overflow用户
提问于 2020-12-29 16:37:45
回答 2查看 58关注 0票数 0
代码语言:javascript
运行
复制
mysql> select * from book;
+----+-------------+---------------+----------+
| id | title       | description   | maker_id |
+----+-------------+---------------+----------+
|  1 | About Music | Music is Life |        1 |
|  2 | About Life  | Life is alone |        1 |
|  3 | Math Book   | Math.PI...    |        2 |
|  4 | Novel Book  | I am handsome |        3 |
|  5 | About Time  | TimeTravel    |        1 |
|  6 | I'm steve   | by steve      |        4 |
|  7 | hi          | hi            |        5 |
+----+-------------+---------------+----------+
7 rows in set (0.00 sec)

mysql> select * from book where id = if(true, (select maker_id), 0);
+----+-------------+---------------+----------+
| id | title       | description   | maker_id |
+----+-------------+---------------+----------+
|  1 | About Music | Music is Life |        1 |
+----+-------------+---------------+----------+
1 row in set (0.01 sec)

mysql> select * from book where id = if(true, (select maker_id from book), 0);
ERROR 1242 (21000): Subquery returns more than 1 row

大家好,我是韩国留学生。我不知道为什么上面的情况运行良好,为什么错误出现在下面的情况中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-29 16:41:14

select * from book where id = if(true, (select maker_id), 0);中,子查询(select maker_id)为当前行选择maker_id列值(子查询按事实相关)-因此生成标量值。

select * from book where id = if(true, (select maker_id from book), 0);中,子查询(select maker_id from book)从独立的maker_id表副本中选择所有book列值-因此,如果book包含超过1行,就会生成一个行集,并且会发生错误。

票数 0
EN

Stack Overflow用户

发布于 2020-12-29 16:52:30

而第一条语句将id与同一行上的maker_id匹配

代码语言:javascript
运行
复制
select * from book where id = if(true, (maker_id), 0);

这句话

代码语言:javascript
运行
复制
select * from book where id = if(true, (select maker_id from book), 0);

执行第二个查询(来自同一个表'book'),因此结果仍然是所有行。

如果将别名添加到表中,这一点会更清楚:

代码语言:javascript
运行
复制
select FIRST.* from book FIRST where FIRST.id = if(true, (select SECOND.maker_id from book  SECOND), 0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65489428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档