Câu trả lời:
Vâng, hoàn toàn, nhưng kiểm tra cú pháp của bạn.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Bạn có thể đặt một hằng số cùng loại như gid
ở vị trí của nó, không chỉ 1, tất nhiên. Và, tôi chỉ tạo nên cid
giá trị.
OUTPUT
mệnh đề , cho phép bạn đặt bất cứ thứ gì bạn chèn vào bảng khác. Tôi không nghĩ MySQL có tương đương. Bạn có thể tạo một bảng tạm thời , chọn vào bảng đó, sau đó điền courses
vào bảng đó, sau đó sử dụng bảng tạm thời cho bất cứ điều gì khác bạn cần.
Vâng, đúng vậy. Bạn có thể viết :
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
hoặc bạn có thể nhận các giá trị từ một tham gia khác của chọn ...
Cú pháp đúng: chọn sai chính tả
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Chắc chắn, những gì bạn muốn sử dụng cho gid? một giá trị tĩnh, var var, ...
Giá trị tĩnh của 1234 có thể như sau:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Tôi nghĩ rằng câu lệnh INSERT của bạn sai, xem cú pháp đúng: http://dev.mysql.com/doc/refman/5.1/en/insert.html
chỉnh sửa: như Andrew đã chỉ ra ...
Tất nhiên bạn có thể.
Tuy nhiên, một điều cần lưu ý: Câu INSERT INTO SELECT
lệnh sao chép dữ liệu từ một bảng và chèn nó vào một bảng khác VÀ yêu cầu các loại dữ liệu trong bảng nguồn và bảng đích khớp nhau. Nếu các kiểu dữ liệu từ các cột trong bảng đã cho không khớp (nghĩa là cố gắng chèn VARCHAR
vào INT
hoặc TINYINT
vào INT
) thì máy chủ MySQL sẽ ném SQL Error (1366)
.
Vì vậy, hãy cẩn thận.
Đây là cú pháp của lệnh:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Lưu ý bên lề: Có một cách để tránh sự cố chèn các loại cột khác nhau bằng cách sử dụng chức năng truyền trong SELECT
ví dụ:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Chuyển đổi này ( CAST()
là từ đồng nghĩa của CONVERT()
) rất hữu ích nếu các bảng của bạn có các bộ ký tự khác nhau trên cùng một cột của bảng (điều này có khả năng dẫn đến mất dữ liệu nếu không được xử lý đúng cách).
Cú pháp đúng cho truy vấn của bạn là:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid