使用Select进行内部连接的SQL查询

use*_*690 9 sql

我想编写如下的SQL查询.它的语法不正确.我该如何纠正?

$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";
Run Code Online (Sandbox Code Playgroud)

Adr*_*fin 24

我认为在subselect之后它的缺失'如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
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 5

如果您针对子选择进行连接,则必须为其命名。将名称放在子选择上,而不是其中的表:

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
Run Code Online (Sandbox Code Playgroud)