2010-07-12 38 views
8

Tôi có SQL sau đây và nó ném lỗi cột nhập nhằng tên 'id'tên cột mơ hồ

select tbl_registration.*, tbl_ebp.name as ebp_name, tbl_Users.id as user_id, tbl_ebp.id as linked_ebp_id 
from tbl_registration 
left outer join tbl_ebp on tbl_ebp.id = tbl_registration.ebp_id 
left outer join tbl_users on tbl_registration.email = tbl_users.username 
where id = [PARAM]p_id 

Tôi đã đọc một số bài viết về vấn đề này, nhưng không thể tìm thấy một giải pháp làm việc cho mã của tôi. Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

21

bạn mệnh đề WHERE id cần phải được cụ thể hơn, bao gồm các tên bảng:

WHERE table.id = [PARAM]p_id 

Nếu hai điều chia sẻ cùng tên, đây là nơi mà các bước nhập nhằng trong Trong trường hợp này nhiều bảng trong SQL của bạn. chứa cột "id".

SQL có thông minh để phân biệt các tên cột nếu tên cột là duy nhất trên tập hợp bảng hiện tại đang được chạm vào - do đó phần lớn thời gian bạn không cần phải đặt tên cột tiền tố với tên bảng.

+2

Cá nhân tôi thích để luôn luôn xác định các bảng lĩnh vực này đến từ đâu. Điều này giúp bảo trì dễ dàng hơn nhiều, đặc biệt là khi xử lý các truy vấn kiểu báo cáo phức tạp tham gia vào 10 bảng differnt. Bằng cách đó tôi biết nơi mà các lĩnh vực đến từ nếu nó là một trong đó là đem lại cho tôi một vấn đề mà không cần phải tìm kiếm cấu trúc của mười bảng differnt để tìm ra nơi nó đến từ. – HLGEM

6

nhiều khả năng nhiều hơn một bảng có một cột có tên là id; sử dụng tiền tố bảng trong mệnh đề where

4

Bạn đã thử tiền tố tên cột id trong mệnh đề where?

2

Nó đề cập đến "id" trong mệnh đề where của bạn. Bạn cần phải xác định "id" của bảng nào cần lọc.

0

tôi đã thay thế mã của bạn

select *, tbl_ebp.name as ebp_name, tbl_Users.id as user_id, tbl_ebp.id as linked_ebp_id 
from tbl_registration 
left outer join tbl_ebp on tbl_ebp.id = tbl_registration.ebp_id 
left outer join tbl_users on tbl_registration.email = tbl_users.username 
where your_respective_tblname.id = your_respective_tblname.[PARAM]p_id