mysql中dual表

在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
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章