2011-07-28 26 views
5

Có thể có INSERT từ bảng tham chiếu nếu có gì đó tồn tại không?MySQL Tham gia với Chèn được kết hợp?

nói đây là truy vấn để chèn một số dữ liệu ...

INSERT INTO `Test`.`Items` (
`Name` , 
`Type` , 
`Number` 
) 
VALUES (
'Pork', 'Sausage', 6 
); 

Và rằng tôi có một bảng tra cứu gọi là "Lookup" có chứa hai cột. "Loại" và "Số". Những gì tôi muốn là nếu một cái gì đó tồn tại trong bảng "tra cứu" trong trường hợp này cho Loại xúc xích sau đó để kéo vào trường "Số" từ bảng tra cứu thay vì chèn 6 trong câu lệnh INSERT.

enter image description here

Hy vọng điều đó là rõ ràng!

Trả lời

7
INSERT INTO Test.Items 
    (Name, Type, Number) 
    SELECT 'Pork', 'Sausage', COALESCE(l.Number, 6) 
     FROM Lookup l 
     WHERE l.Type = 'Sausage' 

EDIT: Mẫu bổ sung dựa trên nhận xét bên dưới.

Sử dụng UNION ALL chuỗi chèn nhau:

INSERT INTO Test.Items 
    (Name, Type, Number) 
    SELECT 'Pork', 'Sausage', COALESCE(l.Number, 6) 
     FROM Lookup l 
     WHERE l.Type = 'Sausage' 
    UNION ALL 
    SELECT 'Halibut', 'Fish', COALESCE(l.Number, 7) 
     FROM Lookup l 
     WHERE l.Type = 'Fish' 

Sử dụng một bảng tạm thời:

CREATE TEMPORARY TABLE tmpItems (
    Name VARCHAR(255), 
    Type VARCHAR(255), 
    Number INT 
) 

INSERT INTO tmpItems 
    (Name, Type, Number) 
    VALUES ('Pork', 'Sausage', 6) 
INSERT INTO tmpItems 
    (Name, Type, Number) 
    VALUES ('Halibut', 'Fish', 7) 

INSERT INTO Test.Items 
    (Name, Type, Number) 
    SELECT t.Name, t.Type, COALESCE(l.Number, t.Number) 
     FROM tmpItems t 
      LEFT JOIN Lookup l 
       ON t.Type = l.Type 
+0

Đó là rực rỡ, không bao giờ đã thấy lệnh liên hiệp hai, rất đẹp! –

+0

Nếu tôi muốn nhiều bảng tra cứu nói giá trị khác, tôi sẽ cấu trúc như thế nào? Vì vậy, một bảng Lookup2 ví dụ, nơi tôi (sử dụng ví dụ này) tra cứu Tên –

+1

@Lee: Có một vài cách tiếp cận. Bạn có thể xâu chuỗi các câu lệnh SELECT với toán tử UNION ALL hoặc nếu bạn có đủ số giá trị để chèn, bạn có thể điền một bảng tạm thời với tất cả các giá trị của bạn và sau đó JOIN với Lookup. Tôi sẽ cung cấp mẫu của mỗi cho bạn. –

Các vấn đề liên quan