2013-03-20 54 views
36

Có cách nào để chèn giá trị và giá trị được đặt trước mà tôi nhận được từ truy vấn chọn không? Ví dụ:MySQL INSERT INTO ... GIÁ TRỊ VÀ CHỌN

INSERT INTO table1 VALUES ("A string", 5, [int]). 

tôi có giá trị của "Một chuỗi" và số 5, nhưng tôi đã tìm thấy [int] giá trị từ một lựa chọn như thế này:

SELECT idTable2 
FROM table2 
WHERE ... 

rằng cung cấp cho tôi id đó để đặt bên trong table1.

Làm cách nào để hợp nhất điều này vào một tuyên bố?

Trả lời

62

Sử dụng một truy vấn insert ... select, và đặt các giá trị nổi tiếng trong select:

insert into table1 
select 'A string', 5, idTable2 
from table2 
where ... 
+1

Một vấn đề tôi đã tìm thấy với phương pháp này là nếu 'SELECT' trả về zero hồ sơ sau đó báo cáo kết quả thành công nhưng không có dữ liệu là' INSERT'. –

+2

@ NeilC.Obremski: Vâng, nhưng đó chỉ là một vấn đề nếu bạn mong đợi kết quả là một cái gì đó khác. Nếu bạn muốn có lỗi trong trường hợp đó, bạn có thể sử dụng truy vấn phụ thay thế. – Guffa

+0

cảm ơn bạn rất nhiều, tôi đã tẩy sạch internet cho số – ComradeJoecool

1

Hãy thử như sau:

INSERT INTO table1 
SELECT 'A string', 5, idTable2 idTable2 FROM table2 WHERE ... 
46

chỉ cần sử dụng các subquery ngay tại đó như:

INSERT INTO table1 VALUES ("A string", 5, (SELECT ...)). 
+2

+1 này để cung cấp ví dụ về cách thực hiện trong khi vẫn sử dụng cú pháp 'VALUES'. – EleventyOne

+1

phương pháp này có thể đưa ra lỗi như "nhiều hơn 1 hàng" –

+5

Nó phải là "INSERT INTO table1 VALUES (" Một chuỗi ", 5, (SELECT ... LIMIT 1))." – Rahnzo

0

Hãy thử cách này:

INSERT INTO table1 SELECT "A string", 5, idTable2 FROM table2 WHERE ... 
1
INSERT INTO table1 (col1, col2) 
SELECT "a string", 5, TheNameOfTheFieldInTable2 
FROM table2 where ... 
8

thử này

INSERT INTO TABLE1 (COL1 , COL2,COL3) values 
('A STRING' , 5 , (select idTable2 from Table2)) 
where ... 
+4

Còn nhiều cột từ bảng 'SELECT' thì sao? Nếu tôi thử nhiều hơn một cột đến từ đó, tôi nhận được 'Toán tử phải chứa 1 cột (s)'. –

5

Tất cả các câu trả lời khác giải quyết vấn đề và câu trả lời của tôi hoạt động theo cách tương tự như những người khác, nhưng chỉ trên một didactically hơn cách (hoạt động trên MySQL ... không biết các máy chủ SQL khác):

INSERT INTO table1 SET 
    stringColumn = 'A String', 
    numericColumn = 5, 
    selectColumn = (SELECT idTable2 FROM table2 WHERE ...); 

Bạn có thể tham khảo các tài liệu MySQL: INSERT Syntax

10
 
INSERT INTO table_name1 
      (id, 
      name, 
      address, 
      contact_number) 
SELECT id, name, address, contact_number FROM table_name2; 
Các vấn đề liên quan