繁体   English   中英

SQL 查询内部连接 Select

[英]SQL query for Inner Join with Select

我想编写一个 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";

我认为这是在子选择之后缺少'as 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

如果你加入一个子选择,你必须给它命名。 将名称放在子选择上而不是其中的表:

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

您没有为第二个表命名,但您稍后会在 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"
;

尝试没有嵌套 SELECT 语句的 JOIN,只有表名。 尝试:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM