我需要帮助构建 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/