将嵌套查询转换为 sql 视图

Posted

技术标签:

【中文标题】将嵌套查询转换为 sql 视图【英文标题】:Convert Nested queries into sql view 【发布时间】:2014-03-27 05:31:08 【问题描述】:

我有这三个不同的查询。这些查询给我独立正确的结果。现在我想将这三个查询合并到一个查询或视图中,以便从一个查询中轻松获得结果。

$sql1 = "select * from user_post_like  
                            inner join user_post 
                            on user_post_like.postID = user_post.postID 
                            where ((user_post.poster='$uID' AND user_post_like.userID!='$uID'  )  OR (user_post.wallID='$uID'
                                    AND user_post_like.userID!='$uID') 
                                    AND user_post_like.notificationStatus=0)";


    $sql2 = "select * from user_post_comment 
                            inner join user_post
                            on user_post_comment.postID = user_post.postID 
                            where ((user_post.poster='$uID' AND user_post_comment.commenter!='$uID') OR (user_post.wallID='$uID' AND user_post_comment.commenter!='$uID')
                            AND user_post_comment.notificationStatus=0)";


    $sql3 = "select * from user_post_share  
                            inner join user_post  
                            on user_post_share.postID = user_post.postID 
                            where ((user_post.poster='$uID'  
AND   user_post_share.Share_user_id!='$uID') OR (user_post.wallID='$uID' AND user_post_share.Share_user_id!='$uID')                                 AND  
user_post_share.notificationStatus=0)";

【问题讨论】:

【参考方案1】:

这完全取决于您的表结构以及您希望单个结果集的外观。

如果你的三个表结构相同,可以用UNION组合起来:

$big_single_query = "$sql1 UNION $sql2 UNION $sql3";

如果它们的结构不同,可以将三个单独查询的逻辑组合成一个三表连接:

SELECT upl.*, upc.*, ups.* 
FROM user_post_like as upl
LEFT JOIN user_post_comment as upc on ...
LEFT JOIN user_post_share as ups on ...
WHERE (...) and (... ) and (...);

但是由于您没有发布表格的结构或输出的格式,因此您必须填写详细信息才能获得所需的内容。

【讨论】:

然后使用连接语法。希望您不需要像我在示例中那样使用 * - 您最好只选择程序所需的列。

以上是关于将嵌套查询转换为 sql 视图的主要内容,如果未能解决你的问题,请参考以下文章

SQL(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?

优化多个嵌套选择的 SQL 查询

在这种情况下如何避免嵌套 SQL 查询?

sql的嵌套查询,把一次查询的结果做为表继续进一步查询;内联视图

嵌套选择MongoDB查询错误

如何在查询生成器中有效地转换嵌套 SQL [重复]