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大家好,我是韩国留学生。我不知道为什么上面的情况运行良好,为什么错误出现在下面的情况中。
发布于 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行,就会生成一个行集,并且会发生错误。
发布于 2020-12-29 16:52:30
而第一条语句将id与同一行上的maker_id匹配
select * from book where id = if(true, (maker_id), 0);这句话
select * from book where id = if(true, (select maker_id from book), 0);执行第二个查询(来自同一个表'book'),因此结果仍然是所有行。
如果将别名添加到表中,这一点会更清楚:
select FIRST.* from book FIRST where FIRST.id = if(true, (select SECOND.maker_id from book SECOND), 0;https://stackoverflow.com/questions/65489428
复制相似问题