![]()
測試環境為 CentOS 8 x86_64 (虛擬機)
INSERT 的資料有辦法從另外一個資料表 ( TABLE ) 而來嗎? 可以使用 INSERT INTO SELECT FROM .
先建立要用來測試的資料.
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE testdb;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> USE testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [testdb]> CREATE TABLE Project (K1 INT(11) NOT NULL AUTO_INCREMENT , ProjectName VARCHAR(199) NOT NULL , Member VARCHAR(199) NOT NULL, PRIMARY KEY (K1));
Query OK, 0 rows affected (0.008 sec)
MariaDB [testdb]> INSERT INTO Project (ProjectName , Member) VALUES('A','Ben') , ('A','Jason') , ('A','Thomas') , ('B','Jack') , ('B','Andy') , ('B','Chuck') , ('C','Jack') , ('C','Jason') , ('C','Chuck');
Query OK, 9 rows affected (0.003 sec)
Records: 9 Duplicates: 0 Warnings: 0
MariaDB [testdb]> SELECT * FROM Project;
+----+-------------+--------+
| K1 | ProjectName | Member |
+----+-------------+--------+
| 1 | A | Ben |
| 2 | A | Jason |
| 3 | A | Thomas |
| 4 | B | Jack |
| 5 | B | Andy |
| 6 | B | Chuck |
| 7 | C | Jack |
| 8 | C | Jason |
| 9 | C | Chuck |
+----+-------------+--------+
9 rows in set (0.001 sec)
現在建立 ProjectA 資料表,資料是從 Project 資料表而來的.
MariaDB [testdb]> CREATE TABLE ProjectA (K1 int(11) NOT NULL AUTO_INCREMENT , Name VARCHAR(199) NOT NULL , PRIMARY KEY (K1)); Query OK, 0 rows affected (0.007 sec) MariaDB [testdb]> SELECT Member FROM Project WHERE ProjectName='A'; +--------+ | Member | +--------+ | Ben | | Jason | | Thomas | +--------+ 3 rows in set (0.001 sec)
一般 INSERT 後面接著是 VALUE() ,這語法後面接著 SELECT ,這 SELECT 的回傳值直接等於 INSERT 的 VALUE() 值,而且可以搭配 WHERE 來使用,這解決了 INSERT 本身無法使用 WHERE 的限制.
MariaDB [testdb]> INSERT INTO ProjectA (Name) SELECT Member FROM Project WHERE ProjectName='A'; Query OK, 3 rows affected (0.002 sec) Records: 3 Duplicates: 0 Warnings: 0
MariaDB [testdb]> SELECT * FROM ProjectA; +----+--------+ | K1 | name | +----+--------+ | 1 | Ben | | 2 | Jason | | 3 | Thomas | +----+--------+ 3 rows in set (0.001 sec)
前面分開 Create 跟 Insert 可以直接用 CREATE AS 來取代.
MariaDB [testdb]> CREATE TABLE ProjectB AS SELECT Member FROM Project WHERE ProjectName='B'; Query OK, 3 rows affected (0.003 sec) Records: 3 Duplicates: 0 Warnings: 0
MariaDB [testdb]> SELECT * FROM ProjectB; +--------+ | Member | +--------+ | Jack | | Andy | | Chuck | +--------+ 3 rows in set (0.000 sec)
沒有解決問題,試試搜尋本站其他內容