2013-03-01 27 views
5

Tôi gặp sự cố. Có ba bảng: T1, T2, T_target. Bảng T1 và T2 có nhiều cột khác nhau nhưng tôi chỉ cần cột ID từ cả hai. Bảng T_target có một cột ID của khóa học và một cột khác: project_No.Chèn vào với công đoàn

Có một số ID xuất hiện trong T1 và T2, nhưng tôi không muốn tạo bản sao giữa chúng, nếu ID xuất hiện trong cả hai bảng, nó phải được chèn vào T_target chỉ một lần nhưng nếu nó đã trong T_target nó được phép hành động hai lần. Một tiêu chí khác là mỗi ID mới được chèn phải là giá trị 21 trong cột 'project_No'. Vì vậy, ví dụ .:

T1:

ID 
2548 
2566 
2569 
2843 
2888 
... 

T2:

ID 
2557 
2566 
2569 
2700 
2913 
2994 
3018 
5426 
... 

T_target:

ID  project_No 
2976 1 
3331 7 
4049 7 
5426 8 
5915 3 
6253 10 
... 

Và kết quả tôi muốn gia nhập e:

T_target:

ID  project_No 
2548 21 
2557 21 
2566 21 
2569 21 
2700 21 
2843 21 
2888 21 
2913 21 
2976 1 
2994 21 
2018 21 
3331 7 
4049 7 
5426 8 
5426 21 
5915 3 
6253 10 
... 

Vì vậy, tôi đã thử nó với mã này (điều quan trọng là để có mặt ở đây "NOT NULL" Tiêu chí vì cả hai cột T_target là khóa chính):

Thông báo lỗi: "Msg 512, Cấp 16, Tiểu bang 1, Dòng 2 Truy vấn con trả về nhiều hơn 1 giá trị. Điều này không được phép khi truy vấn con sau =,! =, <, < =,>,> = hoặc khi truy vấn phụ được sử dụng làm biểu thức. Những tuyên bố đã bị chấm dứt "

Sau đó, tôi đã cố gắng với GIÁ TRỊ tuyên bố thay vì là người đầu tiên và dấu ngoặc CHỌN nhưng lỗi là như nhau

Có một vấn đề tương tự:.. mySQL query: How to insert with UNION? nhưng giải pháp này doesn 't làm việc đối với tôi bởi vì nó chỉ ra lỗi cú pháp giữa GIÁ TRỊ và SELECT.

Xin vui lòng, cho tôi một tay. Cảm ơn bạn!

+0

Tôi chưa đọc hầu hết câu hỏi của bạn, nhưng tôi nghĩ cú pháp chính xác cho truy vấn hiện tại của bạn là: 'chèn vào T_target (ID, project_No) chọn ID, 21 từ T1 trong đó ID không phải là NULL union select ID, 21 từ T2 trong đó ID không phải là NULL' – Bridge

Trả lời

19

này nên làm gì bạn cần

INSERT INTO T_target 
      (ID, 
      project_No) 
SELECT ID, 
     21 
FROM T1 
WHERE ID IS NOT NULL 
UNION 
SELECT ID, 
     21 
FROM T2 
WHERE ID IS NOT NULL 
+0

Nó hoạt động, cảm ơn bạn! – A117

+0

Tôi thường viết một câu lệnh if, nhưng khi sử dụng chiến lược này, nó giúp tôi không phải viết phần chèn nhiều lần, yêu thích giải pháp này, sẽ làm theo cách này từ bây giờ khi có thể.:) –

1

Tôi nghĩ bạn phải sửa đổi một chút để tránh trùng lặp ID trong câu lệnh chọn.

INSERT INTO T_target 
      (ID, 
      project_No) 

SELECT ID, 21 
FROM (
SELECT ID 
FROM T1 
WHERE ID IS NOT NULL 
UNION 
SELECT ID 
FROM T2 
WHERE ID IS NOT NULL 
) A 
+1

fyi: Tôi không nghĩ bạn cần 'khác biệt' với 'union'. – Kaf

+0

Bạn hoàn toàn đúng. - Lấy làm tiếc –

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