如何在视图 SQL 的全选 (*) 中创建子查询?

Posted

技术标签:

【中文标题】如何在视图 SQL 的全选 (*) 中创建子查询?【英文标题】:How make a subquery in a select all (*) for a view SQL? 【发布时间】:2016-01-05 12:27:22 【问题描述】:

我想创建一个包含多个表的视图,但我需要的是 select * from 一个表和 select 其余表中的几个。这是我到目前为止所拥有的:

CREATE VIEW `database`.`pages_view` AS
SELECT
    `p`.`p_name` AS `p_name`,
    `p`.`slug` AS `slug`,
    `i`.`image` AS `image`,
    `t`.`title` AS `title`,
    `t`.`text` AS `text`,
    `s`.`sec_name` AS `sec_name`
FROM
    (((`database`.`pages` `p`
    LEFT JOIN `database`.`page_image` `i` ON ((`p`.`id` = `i`.`pages_id`)))
    LEFT JOIN `database`.`page_text` `t` ON ((`p`.`id` = `t`.`pages_id`)))
    LEFT JOIN `database`.`sections` `s` ON ((`p`.`id` = `t`.`pages_id`)))
WHERE
    (`p`.`visible` = 1)

我要的是select * from sections,而不是一一调用。

【问题讨论】:

为什么要用这么多圆括号? @lad2025 只是个副jejejeje 【参考方案1】:

只需使用s.*:

CREATE VIEW database.pages_view AS
    SELECT p.p_name, p.slug, i.image, t.title, t.text,
           s.*
    FROM database.pages p LEFT JOIN 
         database.page_image i
         ON p.id = i.ages_id LEFT JOIN 
         database.page_text t
         ON p.id = t.pages_id LEFT JOIN
         database.sections s
         ON p.id = t.pages_id
    WHERE p.visible = 1;

注意事项:

您不需要转义字符(除非您的表或列名称不佳)。 对于表别名尤其如此。 您不需要将列重命名为相同的名称 p.p_name as p_name 是多余的 - 不值得额外输入。

另外,在视图中使用* 时要小心。这是您问题的答案,但列的名称、类型和顺序取决于基础表。

【讨论】:

我已经用 * 盘了,但没有给我结果,谢谢你的建议 这对我来说似乎是正确的答案。您确定您的数据符合您提供的标准吗?你期望的结果是什么,你得到了什么? ops 是我的错误,错字对不起,您的回答是正确的,非常感谢

以上是关于如何在视图 SQL 的全选 (*) 中创建子查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SKScene 中创建子视图?

如何使用uwp中的全选复选框创建带有复选框项目的列表视图

如何在 Querydsl 中创建子查询

如何在 PHP 中创建子查询?

在 PHP MVC 中创建子视图

如何在android的导航菜单中创建子级别?