2011-07-06 28 views
21

Trong MySQL, tôi muốn tạo một bảng mới với tất cả các thông tin trong truy vấn này:MySQL: Tạo một bảng mới với thông tin từ một truy vấn

select * into consultaa2 from SELECT 
CONCAT( 'UPDATE customers SET 
customers_default_address_id= ',  
(SELECT a.address_book_id FROM 
address_book a where 
c.customers_id=a.customers_id order by 
address_book_id desc limit 1), ' 
WHERE customers_id = ', customers_id, 
';') AS sql_statement FROM customers c 
where c.customers_id > 3894; 

Truy vấn quá dài cho trình duyệt để hiển thị concat và tôi cần điều này để thực hiện cập nhật này.

Trả lời

14

Chèn vào một bảng với các thông tin từ một truy vấn là các định dạng

INSERT INTO <TABLE-1> 
SELECT * FROM <TABLE-2> 

Trong trường hợp của bạn, nó sẽ là

insert into consultaa2 
SELECT CONCAT('UPDATE customers SET customers_default_address_id= ', 
(SELECT a.address_book_id FROM address_book a where c.customers_id=a.customers_id order by address_book_id desc limit 1), ' WHERE customers_id = ', customers_id, ';') AS sql_statement FROM customers c where c.customers_id > 3894; 

Chỉ cần chắc chắn các cột trong bảng bạn đang chèn vào và các cột được trả lại từ kết quả truy vấn chọn.

+0

Bạn biết tôi đã cố gắng giống nhau và không làm việc, tôi chỉ nhận ra rằng bởi vì nó là một truy vấn mysql không biết những gì loại trường này để tạo , thực sự điên rồ nhưng cố định bằng cách tạo bảng và trường theo cách thủ công :) – Saikios

+1

Câu trả lời @ daniel-hilgarth thực sự là câu trả lời đúng cho câu hỏi Saikios vì nó sẽ tạo bảng mới dựa trên cấu trúc bảng đã chọn. Saikios cú pháp truy vấn trông rất giống cú pháp TSQL để làm điều này. –

86

Bạn có thể làm điều đó như thế này:

CREATE TABLE tablename SELECT * FROM othertable; 

tablename là tên của bảng mới mà bạn muốn tạo, SELECT * FROM othertable là truy vấn mà trả về dữ liệu bảng nên được tạo ra từ đâu.

+0

Có thể làm điều gì đó như thế này, nhưng chỉ tạo một bảng tạm thời? – kevando

+1

@ kevando có, đó là: 'TẠO TEMPORARY BẢNG tablename AS (SELECT * FROM othertable);' – pymkin

+0

Và có thể làm điều đó giống như thế này nhưng thêm một trường bổ sung không có trong truy vấn gốc? Ví dụ, tôi muốn thêm một khóa chính cho bảng như 'id INT NOT NULL AUTO_INCREMENT PRIMARY KEY'. Điều này có thể giải quyết như thế nào? – Metafaniel

7

mysql tạo bảng mới

Ví dụ từ mysql dòng lệnh.

mysql> create table foo(id int, vorta text); 
Query OK, 0 rows affected (0.02 sec) 

Chèn hàng

mysql> insert into foo values(1, 'for the hoarde'); 
Query OK, 1 row affected (0.00 sec) 

hãy nhìn những gì ở trong đó

mysql> select * from foo; 
+------+----------------+ 
| id | vorta   | 
+------+----------------+ 
| 1 | for the horde | 
+------+----------------+ 
1 row in set (0.00 sec) 

Tạo một bảng mới với thông tin từ một truy vấn

mysql> create table foo2 select * from foo; 
Query OK, 1 row affected (0.01 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

Kiểm tra nếu các dữ liệu chuyển

mysql> select * from foo2; 
+------+----------------+ 
| id | vorta   | 
+------+----------------+ 
| 1 | for the horde | 
+------+----------------+ 
1 row in set (0.00 sec) 
Các vấn đề liên quan