MySQL的。使用子查询创建视图。多个表格

时间:2016-09-19 17:29:38

标签: mysql sql subquery

我差点儿,但需要一点点推动。

我有以下表格:

EMPLEADOS(员工):

+--------+----------+------------+----------+------------+---------+----------+--------+
| EMP_NO | APELLIDO | OFICIO     | DIRECTOR | FECHA_ALTA | SALARIO | COMISION | DEP_NO |
+--------+----------+------------+----------+------------+---------+----------+--------+
|   7499 | ALONSO   | VENDEDOR   |     7698 | 1981-02-23 | 1400.00 |   400.00 |     30 |
|   7521 | LOPEZ    | EMPLEADO   |     7782 | 1981-05-08 | 1350.50 |     NULL |     10 |
|   7654 | MARTIN   | VENDEDOR   |     7698 | 1981-09-28 | 1500.00 |  1600.00 |     30 |
|   7698 | GARRIDO  | DIRECTOR   |     7839 | 1981-05-01 | 3850.12 |     NULL |     30 |
|   7782 | MARTINEZ | DIRECTOR   |     7839 | 1981-06-09 | 2450.00 |     NULL |     10 |
|   7839 | REY      | PRESIDENTE |     NULL | 1981-11-17 | 6000.00 |     NULL |     10 |
|   7844 | CALVO    | VENDEDOR   |     7698 | 1981-09-08 | 1800.00 |     0.00 |     30 |
|   7876 | GIL      | ANALISTA   |     7782 | 1982-05-06 | 3350.00 |     NULL |     20 |
|   7900 | JIMENEZ  | EMPLEADO   |     7782 | 1983-03-24 | 1400.00 |     NULL |     20 |
+--------+----------+------------+----------+------------+---------+----------+--------+

CLIENTES(客户):

+------------+-------------------------+-----------+-------------+------+-------+----------------+
| CLIENTE_NO | NOMBRE                  | LOCALIDAD | VENDEDOR_NO | DEBE | HABER | LIMITE_CREDITO |
+------------+-------------------------+-----------+-------------+------+-------+----------------+
|        101 | DISTRIBUCIONES GOMEZ    | MADRID    |        7499 | 0.00 |  0.00 |        5000.00 |
|        102 | LOGITRONICA S.L         | BARCELONA |        7654 | 0.00 |  0.00 |        5000.00 |
|        103 | INDUSTRIAS LACTEAS S.A. | LAS ROZAS |        7844 | 0.00 |  0.00 |       10000.00 |
|        104 | TALLERES ESTESO S.A.    | SEVILLA   |        7654 | 0.00 |  0.00 |        5000.00 |
|        105 | EDICIONES SANZ          | BARCELONA |        7499 | 0.00 |  0.00 |        5000.00 |
|        106 | SIGNOLOGIC S.A.         | MADRID    |        7654 | 0.00 |  0.00 |        5000.00 |
|        107 | MARTIN Y ASOCIADOS S.L. | ARAVACA   |        7844 | 0.00 |  0.00 |       10000.00 |
|        108 | MANUFACTURAS ALI S.A.   | SEVILLA   |        7654 | 0.00 |  0.00 |        5000.00 |
+------------+-------------------------+-----------+-------------+------+-------+----------------+

我需要使用表EMPLEADOS中的列EMP_NO,APELLIDO和OFICIO以及来自CLIENTES的表中的CLIENTE_NO,NOMBRE来创建视图。任务是创建所有员工的视图并与他们(已分配)客户端相对应(此处的引用是EMPLEADOS表中的emp_no与表CLIENTES中的VENDEDOR_NO相同)但是列表必须包括所有员工,即使他们不在没有任何客户分配给他们。而这一点是我正在努力的事情。

我得到的是:

create view V_EMPLEADOS (EMP_NO, APELLIDO, OFICIO, CLIENTE_NO, NOMBRE_CL) AS
    -> select em.emp_no, em.apellido, em.oficio, cl.cliente_no, cl.nombre
    -> from EMPLEADOS em, CLIENTES cl
    -> where em.emp_no = cl.vendedor_no;

但是,当然只会创建一些只分配了一些客户的员工的视图。请帮忙。

1 个答案:

答案 0 :(得分:4)

您需要left join

create view V_EMPLEADOS (EMP_NO, APELLIDO, OFICIO, CLIENTE_NO, NOMBRE_CL) AS
    select em.emp_no, em.apellido, em.oficio, cl.cliente_no, cl.nombre
    from EMPLEADOS em left join
         CLIENTES cl
         on em.emp_no = cl.vendedor_no;

简单规则:从不FROM子句中使用逗号。 始终使用JOIN子句中的条件使用正确的ON语法。