2011-10-21 74 views
58

Khi tôi chỉ có một tham gia bên trong trong câu lệnh SQL của tôi, nó hoạt động hoàn hảo. Tôi đã thử tham gia một bảng thứ hai, và bây giờ tôi nhận được một lỗi nói rằng có một lỗi cú pháp (thiếu nhà điều hành). Có gì sai ở đây?Câu lệnh ghép nhiều câu lệnh SQL

adsFormView.SelectCommand = "SELECT * FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse].[grading] = [tableGrade].[id] INNER JOIN [tableCourseType] ON [tableCourse].[course_type] = [tableCourseType].[id] WHERE [prefix]='" & myPrefix & "' AND [course_number]='" & myCourseNum & "'" 
+0

-Hiển thị lệnh chọn trong hộp thư để xem điều gì xuất hiện. Tôi nghĩ rằng tham gia của bạn có thể là ok, và vấn đề là với dấu ngoặc kép hoặc một cái gì đó. – MAW74656

+1

Nếu tôi nhớ chính xác, cú pháp truy cập có bạn bao quanh mỗi lớp với dấu ngoặc đơn, vì vậy hãy thử 'FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse]. [Grading] = [tableGrade]. [Id] (INNER JOIN [tableCourseType] ON [tableCourse]. [Course_type] = [tableCourseType]. [Id]) ' – billinkc

Trả lời

125

Đối với đa bảng tham gia, bạn phải tổ phụ tham gia trong ngoặc:

SELECT ... 
FROM ((origintable 
JOIN jointable1 ON ...) 
JOIN jointable2 ON ...) 
JOIN jointable3 ON ... 

về cơ bản, cho mỗi bảng có thêm bạn tham gia quá khứ đầu tiên, bạn cần có một khung trước bảng 'FROM' ban đầu và một khung đóng trên mệnh đề JOIN 'on' khớp.

+9

Chẳng hạn một tính năng "không trực quan" cho những người đã từng sử dụng * bình thường * SQL ... – qJake

+0

Đây là * chính xác * những gì tôi đang tìm kiếm. Nó giữ cho tôi biết một số cú pháp hoặc tham gia là không chính xác khi nó sẽ làm việc hoàn hảo trên SQL Management studio. – Paramone

22

MS Access (cụ thể, Máy bay phản lực/ACE) yêu cầu dấu ngoặc đơn có nhiều lần kết nối. Hãy thử:

adsFormView.SelectCommand = _ 
    " SELECT * FROM ([tableCourse] " & _ 
    " INNER JOIN [tableGrade] " & _ 
    "  ON [tableCourse].[grading] = [tableGrade].[id]) " & _ 
    " INNER JOIN [tableCourseType] " & _ 
    "  ON [tableCourse].[course_type] = [tableCourseType].[id] " & _ 
    " WHERE [prefix]='" & myPrefix & "'" & _ 
    " AND [course_number]='" & myCourseNum & "'" 
+0

" cụ thể, công cụ Jet db "- không đúng: cùng áp dụng cho phiên bản Engine cơ sở dữ liệu Access (ACE) của động cơ. – onedaywhen

+0

Điểm của tôi là yêu cầu về dấu ngoặc đơn đến từ công cụ db * *, không phải ứng dụng * *. Nhưng bạn là chính xác, các yêu cầu cũng áp dụng cho ACE/ADE/bất cứ điều gì-MS-là-gọi-nó-những-ngày-ngày. Tôi đã cập nhật câu trả lời của mình cho phù hợp. – mwolfe02

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