将嵌套查询转换为 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(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?