51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

mysql中的dual

许多人都是由于本身软弱而做出问心有愧的事来的,并非都是蓄意背信弃义。------拉罗什富科

前两天看到项目中有这样一句SQL

|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 | hljs mysql SELECT (SELECT username FROM `user_2018` WHERE id = 1) username,(SELECT `password` FROM `user_2019` WHERE id = 1) `password` FROM DUAL; |

最后这里有一个FROM DUAL

我没有在数据库中找到DUAL表,它是一个关键字

但我们就算去掉FROM DUAL,也能成功执行

|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------| | 1 | hljs mysql SELECT (SELECT username FROM `user_2018` WHERE id = 1) username,(SELECT `password` FROM `user_2019` WHERE id = 1) `password`; |

而且很多类似的例子

|-----------------|-----------------------------------------------------------------------------------------------| | 1 2 3 4 | hljs mysql -- 查询当前时间 SELECT NOW() FROM DUAL; -- 查询当前数据库版本号 SELECT VERSION() FROM DUAL; |

我们去掉后面的FROM DUAL,仍然能得到同样的结果

网上很多博客文章写的DUAL可用于虚拟列名,效果如下

image-20210724234916670

但我实际测试过,哪怕就是不加FROM DUAL,也是一样的

image-20210724234846425

稍微了解了下,DUALORACLE中作为特殊的表存在

但在MYSQL中它好像确实没用,因此加不加FROM DUAL都无所谓。。。

个人推测可能是MYSQL中默认省略了FROM DUAL

赞(0)
未经允许不得转载:工具盒子 » mysql中的dual