2009-03-06 35 views
10

Tôi cần chèn một hàng vào một bảng, với một giá trị trường được tính từ một bảng khác. Thay vì thực hiện hai truy vấn và mạo hiểm một tình trạng chạy đua, tôi nghĩ sẽ tốt hơn nếu làm tất cả trong một tuyên bố.Tôi có thể sử dụng truy vấn con bên trong câu lệnh INSERT không?

INSERT INTO `myTable` (`someData`, `averageAtThisTime`) 
VALUES (
    "some stuff", 
    SELECT AVG(`myField`) FROM `myOtherTable` 
) 

... nhưng cách này không hiệu quả. Có cách nào tôi có thể đạt được điều này trong một tuyên bố? Nếu không, đề nghị của bạn là gì?

Trả lời

23
INSERT INTO `myTable` (`someData`, `averageAtThisTime`) 
select "some stuff", AVG(`myField`) 
FROM `myOtherTable` 
+0

Tôi không biết rằng bạn có dữ liệu 'SELECT' tùy ý lạnh. Tuyệt quá!! – Triztian

5

Truy vấn phụ của bạn được đặt trong dấu ngoặc đơn. Mã này sẽ hoạt động:

INSERT INTO `myTable` (`someData`, `averageAtThisTime`) 
VALUES (
"some stuff", 
(SELECT AVG(`myField`) FROM `myOtherTable`) 
); 
Các vấn đề liên quan