许多人都是由于本身软弱而做出问心有愧的事来的,并非都是蓄意背信弃义。------拉罗什富科
前两天看到项目中有这样一句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可用于虚拟列名,效果如下

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

稍微了解了下,DUAL在ORACLE中作为特殊的表存在
但在MYSQL中它好像确实没用,因此加不加FROM DUAL都无所谓。。。
个人推测可能是MYSQL中默认省略了FROM DUAL?
51工具盒子