2012-04-05 4 views
6

Я хочу написать SQL-запрос, как показано ниже. Его синтаксис неверен. Как я могу это исправить?SQL-запрос для Inner Join with Select

$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"; 

ответ

18

Я думаю, что это был недостаток «как fp» после подзапроса. Попробуйте этот запрос:

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

Спасибо Adrin, Это прекрасно работает, – user1157690

3

Если вы присоединитесь к подзаголовку, вы должны его назвать. Положите имя на подвыборках вместо таблицы внутри него:

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

Попробуйте РЕГИСТРИРУЙТЕСЬ без вложенного ЗЕЬЕСТА, только имя таблицы. Try:

$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

Вы не дали имя второй таблицы, но вы используете его позже в ON-п. fp отсутствовал после закрывающего кронштейна:

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" 
;