从两个表在 mysql 中创建 VIEW

Posted

技术标签:

【中文标题】从两个表在 mysql 中创建 VIEW【英文标题】:create VIEW in mysql from two tables 【发布时间】:2016-01-09 19:19:17 【问题描述】:

我的邮件服务器有一张用户表。 dovecot中的imap认证表:

+-------------+------------------+-------------------+------------------+------+------+---------------------------------------+--------+---------+---------------------------+
| user_name   | domain_name      | passwd            | pwd_hash         | uid  | gid  | mailbox_basepath                      | enable | quota   | desc_rec                  |
+-------------+------------------+-------------------+------------------+------+------+---------------------------------------+--------+---------+---------------------------+
| logistic    | piduna.pp.ua     | loG-1990M         | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua/           |      1 | 2048000 | box for logistic          |
| 1c          | piduna.pp.ua     | 1c_user_1c        | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua            |      1 | 2048000 | Denisyuk V.V.             |
| admin       | piduna.pp.ua     | AAddMmM1N         | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua            |      1 | 2048000 | Admin                     |
| al.service  | piduna.pp.ua     | Alumo_Serv4321    | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua            |      1 | 2048000 | Alumo Service             |

我需要创建包含两列的表。第一列,all@piduna.pp.ua。第二列是我所有的电子邮件帐户。在一张表中,我知道如何将 user_name 和 domain_name 连接起来。看:

CREATE VIEW `forwardings_all_view` AS select lcase(concat(`users`.`user_name`,'@',`users`.`domain_name`)) AS `email_fqn` from `users` where (`users`.`enable` = 1)

但是,如何在其中添加 VIEW,第二列:all@piduna.pp.ua。

这样:

+------------------------------+-------------------------------------------------+
| email_fqn                    | source                                          | 
+------------------------------+-------------------------------------------------+
| .logistic@piduna.pp.ua       | all@piduna.pp.ua                                | 
| 1c@piduna.pp.ua              |                                                 | 
| admin@piduna.pp.ua           |                                                 |
| al.service@piduna.pp.ua      |                                                 | 

【问题讨论】:

第二列的数据来自哪里? 我认为,我需要创建第二个表。列名为“源”。并在它的列中包含数据:all@piduna.pp.ua 【参考方案1】:

试试这个:

create view first_user as
select user_name from users where enable limit 1;

create view forwardings_all_view as
select lcase(concat(a.`user_name`,'@',a.`domain_name`)) AS `email_fqn`,
  if(b.user_name is null, '', 'all@piduna.pp.ua') `source`
from `users` a
left join first_user b on a.user_name = b.user_name
where a.`enable` = 1;

fiddle

【讨论】:

那很好。但我希望在“col2”中拥有一个带有 all@piduna.pp.ua 的字段,但没有很多字段。 不是全部。我需要一个数据字段。在第二列。在你的例子中,我有很多数据字段 all@piduna.pp.ua 你能发布一个你想要的视图的例子吗?我认为我们对column 的定义不同。 好的。我改变了那个问题。敬请期待。谢谢你的帮助 谢谢,但我有:错误 1349 (HY000):视图的 SELECT 包含 FROM 子句中的子查询

以上是关于从两个表在 mysql 中创建 VIEW的主要内容,如果未能解决你的问题,请参考以下文章

根据其他两个列和表在 pandas 中创建列

mysql 从两个单独的查询中创建选择结果

如何根据database2中的表在database1中创建视图

如何从受 CMEK(客户管理的密钥)保护的 BigQuery 表在 Tableau 中创建数据源?

是否可以仅基于一张表在 Oracle BI OBIEE 中创建分析?

如何在 mySQL 中创建一个空的 VIEW