2012-03-12 36 views
6

Tôi có một MySQL chèn truy vấn mà cần phải kéo một trường dữ liệu từ bảng khác và tôi đã tự hỏi nếu điều này có thể được thực hiện với một subquery chọnMySQL Chèn với chọn subquery cho một giá trị

INSERT INTO resources 
(
    client_account_id, 
    date_time, 
    resource_name, 
    resource_description_id, 
) 
VALUES 
(
     {0}, 
     '{1}', 
     '{2}', 
     {3}, 
) 

và tôi cần một truy vấn chọn để có được những resource_description_id từ một bảng

SELECT resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 

tôi đã thấy những ví dụ cho sao chép toàn bộ bảng, nhưng tôi không chắc chắn cách này có thể được thực hiện khi chỉ là một lĩnh vực là cần thiết từ một bảng và các lĩnh vực khác đến từ một hình thức.

Cảm ơn!

Trả lời

8

Truy vấn con của bạn chỉ có thể CHỌN các giá trị cần thiết. Một cái gì đó như:

INSERT INTO resources 
(
    client_account_id, 
    date_time, 
    resource_name, 
    resource_description_id, 
) 
SELECT {0}, '{1}','{2}', resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{3}' 
+0

Vấn đề với câu trả lời này là nếu resource_description không khớp, bạn sẽ không nhận được gì. Bạn đã thử chạy câu trả lời của mình chưa? – kasavbere

+0

Tôi cũng có một biểu mẫu mà người dùng gửi tên tài nguyên, mô tả và từ khóa, Trước khi tôi chèn vào bảng tài nguyên, tôi chèn vào bảng mô tả tài nguyên, do đó mô tả sẽ luôn khớp. Nhưng điều đó làm cho tôi nghĩ rằng có khả năng mô tả tài nguyên trùng lặp. Có cách nào để kéo hàng được chèn gần đây nhất từ ​​một bảng không? – mike

1
INSERT INTO resources 
(
    resource_description_id 
) 
(
SELECT resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 
) 
0

Bạn có thể làm một chèn sử dụng kết quả của một truy vấn chọn

INSERT INTO resources 
(
client_account_id, 
date_time, 
resource_name, 
resource_description_id 
) 
SELECT 
    '{0}', 
    '{1}', 
    '{2}', 
    resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 
2
INSERT INTO resources 
(
client_account_id, 
date_time, 
resource_name, 
resource_description_id, 
) 
VALUES 
(
    {0}, 
    '{1}', 
    '{2}', 
    SELECT resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 
) 
0

MySQL không giống như hầu hết các truy vấn này, trừ khi tôi thêm ngoặc xung quanh subquery. Đây là những gì tôi đã sử dụng.

INSERT INTO resources 
(
client_account_id, 
date_time, 
resource_name, 
resource_description_id, 
) 
VALUES 
(
    '{0}', 
    '{1}', 
    '{2}', 
    (SELECT resource_description_id 
    FROM resource_descriptions 
    WHERE resource_description = '{0}') 
) 
Các vấn đề liên quan