2012-04-05 35 views
6

Tôi muốn viết một truy vấn SQL như sau. Cú pháp của nó không chính xác. Làm thế nào tôi có thể sửa nó?Truy vấn SQL cho Tham gia bên trong với Chọn

$sql_package_feature = "SELECT f.feature_id, f.feature_name FROM tbl_feature f 
LEFT JOIN SELECT * FROM tbl_feature_and_profile fp WHERE fp.profile_id= ?) ON 
f.feature_id = fp.feature_id AND f.package_id = fp.package_id WHERE fp.feature_id 
IS NULL AND f.package_id = ? ORDER BY f.feature_id"; 

Trả lời

18

Tôi nghĩ rằng nó bị bỏ sót 'như fp' sau khi chọn. Hãy thử truy vấn này:

SELECT 
     f.feature_id, 
     f.feature_name 
FROM tbl_feature f 
LEFT JOIN (SELECT * FROM tbl_feature_and_profile fp WHERE fp.profile_id= ?) 
    as fp ON (f.feature_id = fp.feature_id AND f.package_id = fp.package_id) 
WHERE 
    fp.feature_id IS NULL AND f.package_id = ? ORDER BY f.feature_id 
+0

Cảm ơn Adrin, Điều này làm việc tốt, – user1157690

3

Nếu bạn tham gia chống lại chọn lựa, bạn phải đặt tên cho nó. Đặt tên trên bảng chọn thay vì bảng bên trong nó:

SELECT f.feature_id, f.feature_name 
FROM tbl_feature f 
LEFT JOIN (
    SELECT * 
    FROM tbl_feature_and_profile 
    WHERE profile_id= ? 
) fp ON f.feature_id = fp.feature_id AND f.package_id = fp.package_id 
WHERE fp.feature_id IS NULL AND f.package_id = ? 
ORDER BY f.feature_id 
0

Thử JOIN mà không có lệnh SELECT lồng nhau, chỉ tên bảng. Thử:

$sql_package_feature = 
"SELECT f.feature_id, f.feature_name 
FROM 
tbl_feature f 
LEFT JOIN 
tbl_feature_and_profile fb 
ON f.feature_id = fp.feature_id AND f.package_id = fp.package_id 
WHERE fp.feature_id IS NULL AND f.package_id = ? AND fp.profile_id = ? ORDER BY f.feature_id"; 
1

Bạn không đặt tên cho bảng thứ hai, nhưng bạn đang sử dụng tên này trong bảng điều khiển ON. fp bị thiếu sau khi đóng khung:

SELECT f.feature_id, f.feature_name 
FROM tbl_feature f 
LEFT JOIN (
    SELECT * 
    FROM tbl_feature_and_profile fp 
    WHERE fp.profile_id= ? 
) fp 
ON  f.feature_id = fp.feature_id 
    AND f.package_id = fp.package_id 
WHERE fp.feature_id IS NULL 
    AND f.package_id = ? 
ORDER BY f.feature_id" 
; 
Các vấn đề liên quan