Vấn đề, như đã nói, là bạn đang chọn PEID từ hai bảng, giải pháp là để xác định các PEID nào bạn muốn, ví dụ
SELECT tb.*
FROM (
SELECT tb1.PEID,tb2.col1,tb2.col2,tb3.col3 --, and so on
FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2
ON tb1.PROD_PERM = tb2.PEID
INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID
) AS tb;
đó sang một bên, như Chris Lively khéo léo chỉ ra trong một nhận xét SELECT bên ngoài là hoàn toàn thừa. Sau đây là hoàn toàn tương đương với đầu tiên.
SELECT tb1.PEID,tb2.col1,tb2.col2,tb3.col3 --, and so on
FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2
ON tb1.PROD_PERM = tb2.PEID
INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID
hoặc thậm chí
SELECT *
FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2
ON tb1.PROD_PERM = tb2.PEID
INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID
nhưng xin tránh sử dụng SELECT * bất cứ khi nào có thể. Nó có thể làm việc trong khi bạn đang làm các truy vấn tương tác để lưu gõ, nhưng trong mã sản xuất không bao giờ sử dụng nó.
Nguồn
2009-06-29 14:29:43
Chỉ vì tò mò, tại sao bạn có "chọn tb. *" Bên ngoài? – NotMe