2012-04-05 21 views
6

Deseo escribir una consulta SQL como la siguiente. Su sintaxis no es correcta. ¿Cómo puedo corregirlo?Consulta SQL para combinación interna con Seleccionar

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

Respuesta

18

Creo que faltaba abount como 'fp' después de la subselección. Pruebe esta consulta:

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

Gracias Adrin, Esto funciona bien, – user1157690

3

Si se une a una subselección, tiene que nombrarla. Ponga el nombre en la subselección en lugar de la tabla dentro de él:

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

Pruebe un JOIN sin una instrucción anidada SELECT, solo un nombre de tabla. Probar:

$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

usted no dio un nombre a la segunda tabla, pero se están utilizando más tarde en el EN-Cláusula. fp faltaba después del corchete de cierre:

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