在Mysql和SQL Server中可以直接:
select 1 不需要加from 表名就可以执行
而在Oracle中要满足select from 的结构:
select 1不能实现满足上述结构,引入dual来满足结构。
Oracle这样表示:select 1 from dual
注:上述的数据库中都存在dual表,只是mysql中的dual表没有值select * from dual 这种语句会报错,而在Oracle中会返回一行记录(dual表有一条默认值),二者都可以用dual来满足语法结构。
但是在以下情况下需要加上dual:
mysql> select * from test_book1;1
+——+———–+——————————–+
| id | name | data |
+——+———–+——————————–+
| 1 | 测试数据1 | 测试CSV文件中,有逗号 |
| 2 | 测试数据2 | 测试CSV文件中有”双引号” |
| 3 | 测试数据3 | 测试CSV文件中,有逗号和”双引号” |
| 4 | 测试数据4 | 普通数据 |
+——+———–+——————————–+
4 rows in set (0.01 sec)
最终用户 希望在插入数据库表以前,先判断数据是否已存在
mysql> INSERT INTO test_book1
-> SELECT 1, 'TEST', 'ABC'
-> WHERE NOT EXISTS( SELECT 1 FROM test_book1 WHERE id = 1);123
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ‘WHERE NOT EXISTS( SELECT 1 FROM test_book1 WH
ERE id = 1)’ at line 3结果出错了。
然后尝试单独写一下 SELECT 语句mysql> SELECT 1, ‘TEST’, ‘ABC’
-> WHERE NOT EXISTS( SELECT 1 FROM test_book1 WHERE id = 1);1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ‘WHERE NOT EXISTS( SELECT 1 FROM test_book1 WH
ERE id = 1)’ at line 2
结果还是出错了。
加上一句 FROM dual 以后,正常了。
mysql> SELECT 1, 'TEST', 'ABC' FROM dual
-> WHERE NOT EXISTS( SELECT 1 FROM test_book1 WHERE id = 1);12
Empty set (0.00 sec)
mysql>
->INSERT INTO test_book1
-> SELECT 1, 'TEST', 'ABC' FROM dual
-> WHERE NOT EXISTS( SELECT 1 FROM test_book1 WHERE id = 1);1234
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> INSERT INTO test_book1
SELECT 5, 'TEST', 'ABC' FROM dual
WHERE NOT EXISTS( SELECT 1 FROM test_book1 WHERE id = 5);12
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from test_book1;1
+——+———–+——————————–+
| id | name | data |
+——+———–+——————————–+
| 1 | 测试数据1 | 测试CSV文件中,有逗号 |
| 2 | 测试数据2 | 测试CSV文件中有”双引号” |
| 3 | 测试数据3 | 测试CSV文件中,有逗号和”双引号” |
| 4 | 测试数据4 | 普通数据 |
| 5 | TEST | ABC |
+——+———–+——————————–+5 rows in set (0.00 sec)
参考:
百度知道:https://zhidao.baidu.com/question/536870624.html
---------------------
作者:qq907177955
来源:CSDN
原文:https://blog.csdn.net/qq907177955/article/details/80589015
版权声明:本文为博主原创文章,转载请附上博文链接!