2011-08-12 88 views
7

Xin chào các bạn, tôi hy vọng bạn có thể giúp tôi với vấn đề nhỏ này.SQL INSERT INTO với SELECT và INNER JOIN

Tôi không hoàn toàn chắc chắn về cách giải thích tình huống cho bạn để Ill chỉ cần thử.

Những gì tôi đang cố gắng làm là như sau:

Tôi muốn chèn một số giá trị cụ thể và các thông số (mà tôi gõ vào bản thân mình) vào RFC_Risks bảng, vì vậy về cơ bản mỗi khi tôi tìm thấy một lý do cụ thể bên trong bảng RCF_Risks, tôi muốn viết một hàng mới cập nhật mức độ ưu tiên của RfC, mỗi khi điều đó xảy ra, vị trí sẽ được tăng lên 1.

Vấn đề của tôi bây giờ là khi tôi chạy câu lệnh này, tôi chỉ nhận được phần SELECT :-), không chèn được thực hiện, tôi không nhận được một lỗi báo cáo SQL hoặc bất cứ điều gì như thế. Tôi chỉ cần gõ vào các tham số và sau đó tôi nhận được SELECT Bảng đó.

Tôi đang sử dụng MS Access 2010 và tôi hy vọng bạn có thể giúp tôi giải quyết vấn đề "nhỏ" của mình.

INSERT INTO RFC_Risks (RFC_No, RiskPos, Datum, Comments, RiskPrio, Reason) 
SELECT RFC_Risks.RFC_No, (RFC_Risks.RiskPos +1) AS RiskPos, [Aktuelles Datum] AS Datum, [Kommentartext] AS Comments, [Neue Prio] AS RiskPrio, RFC_Risks.Reason 
FROM RFC_Risks INNER JOIN Risk_Reasons ON RFC_Risks.Reason = Risk_Reasons.Reasontext 
WHERE RFC_Risks.Reason = Risk_Reasons.Reasontext;
+1

FYI, tôi không nghĩ rằng bạn cần mệnh đề 'WHERE' ở cuối,' INNER JOIN' của bạn thực hiện điều đó cho bạn =) – jadarnel27

+0

Bạn nhận được kết quả không mong muốn hoặc lỗi nào? Điều này có vẻ ổn với tôi .. – Yuck

+0

@Yuck nó âm thanh như kết quả bất ngờ mà họ nhận được là không có hồ sơ được chèn vào RFC_Risks (chỉ có phần 'SELECT' được thực hiện) – jadarnel27

Trả lời

1

Thử kèm theo lựa chọn phụ trong dấu ngoặc đơn.

+1

Câu trả lời của tôi có lẽ sẽ tốt hơn như một bình luận , không phải là một câu trả lời, nhưng tôi không thể bình luận về các câu hỏi được nêu ra và SQL trông khá đơn giản với tôi. Theo tôi biết, các thuê bao phải luôn luôn được đính kèm trong dấu ngoặc đơn, vì vậy tôi nghĩ rằng có thể làm việc cho bạn. Chắc chắn trả lời nếu đó không phải là giải pháp. – taz

+0

Vì vậy, bạn có nghĩa là tôi nên đặt một parenthese ở phía trước của lựa chọn? INSERT INTO RFC_Risk (RFC_No, RiskPos, Datum, Nhận xét, Risk_Prio, Lý do) (SELECT RFC_Risks.RFC_No, (RFC_Risks.RiskPos +1) AS RiskPos, [Aktuelles Datum] AS Dữ liệu, [Kommentartext] AS Bình luận, [Neue Prio] AS Risk_Prio, RFC_Risks.Reason FROM Risk_Reasons INNER JOIN RFC_Risks VỀ Risk_Reasons.Reasontext = RFC_Risks.Reason); – sXing

3

Tôi không thể phát hiện bất kỳ điều gì về câu lệnh SQL của bạn, điều này sẽ ngăn không cho nó thực thi và/hoặc ném lỗi. (Tôi nghĩ rằng mệnh đề WHERE của bạn là dư thừa, nhưng điều đó sẽ không làm cho động cơ db từ chối nó.) Bạn đang sử dụng phương pháp nào để "chạy" nó?

Nếu bạn đang sử dụng trình thiết kế truy vấn Access và chuyển từ dạng xem thiết kế sang dạng xem biểu dữ liệu, truy vấn của bạn không thực sự được thực hiện ... Dạng xem biểu dữ liệu sẽ hiển thị cho bạn các hàng sẽ bị ảnh hưởng nếu truy vấn được thực hiện.

Tình huống cũng giống như khi bạn đang tạo truy vấn xóa trong trình thiết kế truy vấn ... Dạng xem biểu dữ liệu sẽ cho bạn biết những hàng nào sẽ bị xóa nếu truy vấn được thực hiện, nhưng chuyển sang dạng xem biểu dữ liệu sẽ không xóa những hàng đó.

Để thực hiện truy vấn, nhấp vào biểu tượng có dấu chấm than màu đỏ.

+0

Cảm ơn bạn rất nhiều vì thông tin đó, tbh Tôi không biết rằng có sự khác biệt trong việc thực hiện truy vấn thông qua biểu dữ liệu hoặc phương thức khác, tôi sẽ dùng thử. – sXing

0

Bạn cần thực hiện truy vấn của mình. Nếu bạn chỉ hiển thị nó trong dạng xem biểu dữ liệu, câu lệnh SELECT được thực thi và hiển thị cho bạn như một dạng xem trước.

Để thực sự thực hiện truy vấn, khi bạn đang ở chế độ thiết kế, bạn có thể nhấp vào nút "Chạy" (dấu chấm than màu đỏ) trên thanh công cụ. Bạn cũng có thể bấm đúp vào truy vấn trong cửa sổ cơ sở dữ liệu.

+0

cảm ơn bạn tôi đã thử điều đó, và bây giờ sau khi tôi nhập các tham số, tôi nhận được một lỗi, nơi truy cập giữ cho tôi biết rằng có một cuộc xung đột quan trọng. Im không hoàn toàn chắc chắn lý do tại sao điều này xảy ra, Bảng RFC_Risk có 2 khóa chính, số RFC và RiskPosition vì một rfc có thể có nhiều hơn thì chỉ có một rủi ro. Bất kỳ ý tưởng? – sXing

+0

@sXing, Có thể bạn đang cố gắng chèn một bản ghi mới với các giá trị sames cho khóa chính dưới dạng bản ghi đã có trong bảng (Bạn cũng có thể thêm hai hoặc nhiều hơn, các bản ghi với các giá trị sames cho khóa chính của chúng). –

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