mysql - 如何在全选(*) View SQL中创建子查询?

标签 mysql sql select subquery view

我想创建一个包含多个表的 View ,但我需要的是 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)

我想要的是从部分中选择*而不是一一调用。

最佳答案

只需使用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 因为 p_name 是多余的 - 不值得额外输入。

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

关于mysql - 如何在全选(*) View SQL中创建子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34611723/

相关文章:

php - Laravel 查询生成器通过对常见结果进行分组来进行计数

c# - WPF - 如何以编程方式备份​​/恢复 LocalDB - ClickOnce

mysql - db 通过 "binary int"模仿数组的坏主意?

php - 如何将多行数据转换为数组并从另一个数组中减去它?

sql - 主键排序

java - 具有可变数量参数但不迭代它们的PreparedStatement

phpMyAdmin 需要很长时间才能显示大表 : Input variables exceeded 1000

PHP - 从 html 复选框中选择 sql

mysql - 如何简化这个子查询?

php - 在 Windows 上使用套接字/路径将 MySQL Workbench 连接到 MAMP