sql - 创建一个 Mysql View 以从不同的表中选择列

标签 sql mysql

我需要帮助构建 4 个表的 View 。该 View 应包含以下列:

ER.ID、ER.EMPID、ER.CUSTID、ER.STATUS、ER.DATEREPORTED、ER.REPORT、EB.NAME、CR.CUSTNAME、CR.LOCID、CL.LOCNAME、DI.DEPTNAME

别名是:

EMP_REPORT ER、EMP_BIO EB、CUST_RECORD CR、CUST_LOC CL、DEPT_ID DI

数据模型是:

describe EMP_REPORT;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment | 
| empid        | int(11)     | NO   |     | NULL    |                | 
| custid       | int(11)     | NO   |     | NULL    |                | 
| status       | varchar(32) | NO   |     | NULL    |                | 
| datereported | bigint(20)  | NO   |     | NULL    |                | 
| report       | text        | YES  |     | NULL    |                | 
+--------------+-------------+------+-----+---------+----------------+

describe EMP_BIO;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| empid  | int(11)     | NO   | PRI | NULL    |       | 
| name   | varchar(56) | NO   |     | NULL    |       | 
| sex    | char(1)     | NO   |     | NULL    |       | 
| deptid | int(11)     | NO   |     | NULL    |       | 
| email  | varchar(32) | NO   |     | NULL    |       | 
| mobile | bigint(20)  | YES  |     | NULL    |       | 
| gtlk   | varchar(32) | YES  |     | NULL    |       | 
| skype  | varchar(32) | YES  |     | NULL    |       | 
| cvid   | int(11)     | YES  |     | NULL    |       | 
+--------+-------------+------+-----+---------+-------+

 describe CUST_RECORD;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| custid   | int(11)      | NO   | PRI | NULL    | auto_increment | 
| custname | varchar(32)  | NO   |     | NULL    |                | 
| address  | varchar(255) | YES  |     | NULL    |                | 
| contactp | varchar(32)  | YES  |     | NULL    |                | 
| mobile   | bigint(20)   | YES  |     | NULL    |                | 
| locid    | int(11)      | NO   |     | NULL    |                | 
| remarks  | text         | YES  |     | NULL    |                | 
| date     | int(11)      | YES  |     | NULL    |                | 
| addedby  | int(11)      | YES  |     | NULL    |                | 
+----------+--------------+------+-----+---------+----------------+

describe CUST_LOC;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| locid   | int(11)     | NO   | PRI | 0       |       | 
| locname | varchar(32) | NO   |     | NULL    |       | 
+---------+-------------+------+-----+---------+-------+

describe DEPT_ID;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptid   | int(11)     | NO   |     | NULL    |       | 
| deptname | varchar(32) | YES  |     | NULL    |       | 
+----------+-------------+------+-----+---------+-------+

EMP_REPORT 表包含员工提交的报告,需要获取其中的所有列。该表中的 empid 应该用于获取 EMP_BIO(员工生物数据)表中的相应名称。 EMP_REPORT 中的 custid 应该用于获取 CUST_RECORD(customer record) 中相应的 locid,该 locid 用于获取 CUST_LOC(customer location) 表中的 locname。 EMP_REPORT中的empid用于获取EMP_BIO表中对应的deptid,然后用于从DEPT_ID(department id)表中获取对应的deptname。

我尝试使用不同选择查询的并集来构建 View ,但没有得到正确的结果。请帮助我。

最佳答案

不要使用联合,使用连接:

SELECT ER.ID, ER.EMPID, ER.CUSTID, ER.STATUS, ER.DATEREPORTED, ER.REPORT, EB.NAME, CR.CUSTNAME, CR.LOCID, CL.LOCNAME, DI.DEPTNAME 
FROM EMP_REPORT er 
JOIN EMP_BIO eb ON eb.empid = er.empid
JOIN CUST_RECORD cr ON cr.custid = er.custid
JOIN CUST_LOC cl ON cl.locid = cr.locid
JOIN DEPT_ID di ON di.deptid = eb.deptid

关于sql - 创建一个 Mysql View 以从不同的表中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750706/

相关文章:

sql - 分区内的排序方式

mysql - 不能用 PDO 设置 NULL

mysqltuner推荐建议

php - 如何计算以特定字母开头但仍包含 '0' 字母的类别

c# - 从数据库创建按钮 - 发生 System.NullReferenceException

mysql - 按多个字段进行 groupBy 时计算行数

sql - Postgres : column must appear in the GROUP BY clause or be used in an aggregate function

MySQL 无法添加外键,尽管列签名相同

mysql - 是否可以将嵌套的 select 语句用作具有多行的列?

Windows Vista 上的 mysql 配置错误