【发布时间】:2021-11-06 20:22:25
【问题描述】:
我有几个表格,其中包含网页中请求的数据。问题是,我做了一些内部连接来合并请求表中外键的数据,但我想添加一个列来计算发送请求的办公室总共拥有的相应设备。
这是我的代码,以便更好地理解我的要求。
我的查询是这样的:
SELECT realiza_soli.*, oficina.id_lugar, oficina.desc_lugar,
tipo_equipamiento.nom_tipo FROM realiza_soli
INNER JOIN usuario
ON realiza_soli.fk_user = usuario.id_user
INNER JOIN tipo_equipamiento
ON realiza_soli.fk_tipo = tipo_equipamiento.id_tipo
INNER JOIN oficina
ON usuario.fk_ofic = oficina.id_lugar
AND realiza_soli.estado_soli = 'Pendiente Info'
ORDER BY realiza_soli.id_soli ASC;
生成的表格是这样的:
+---------+-------------+----------------------+----------------+----------------+----------------+---------+---------+----------+------------+----------+
| id_soli | titulo_soli | desc_soli | estado_soli | fecha_ini_soli | fecha_fin_soli | fk_tipo | fk_user | id_lugar | desc_lugar | nom_tipo |
+---------+-------------+----------------------+----------------+----------------+----------------+---------+---------+----------+------------+----------+
| 1 | Solicitud 1 | Descripción | Pendiente Info | 2020-01-01 | NULL | 1 | 4 | 10 | Oficina 10 | Monitor |
| 13 | 25 Monitor | Dame mmmmmmmaaaaaaas | Pendiente Info | 2021-11-05 | NULL | 1 | 5 | 5 | Oficina 5 | Monitor |
+---------+-------------+----------------------+----------------+----------------+----------------+---------+---------+----------+------------+----------+
问题是,我想根据“oficina”表为每一行添加一个计数,从“equipamiento”表中计算它有多少设备。
这是我的“设备”表:
+----------+------------+----------+-----------------+-------------+------------+-------------+--------------+-----------+---------+----------+---------+---------+
| id_equip | fecha_adq | garantia | desc_equip | marca_equip | tipo | lugar_equip | estado_equip | fk_estado | fk_tipo | fk_marca | fk_ofic | fk_prov |
+----------+------------+----------+-----------------+-------------+------------+-------------+--------------+-----------+---------+----------+---------+---------+
| 1 | 2020-01-01 | 24 | Teclado | Kolke | Componente | Oficina 5 | Instalado | 4 | 21 | 3 | 5 | 1 |
| 2 | 2020-02-02 | 12 | Tarjeta Gráfica | NVIDIA | Componente | Oficina 3 | Instalado | 4 | 6 | 7 | 3 | 2 |
| 3 | 2020-03-03 | 9 | Memoria RAM | ADATA | Componente | NULL | Stock | 2 | 7 | 26 | NULL | NULL |
| 4 | 2020-04-04 | 10 | Tarjeta de Red | Realtek | Componente | Oficina 2 | Instalado | 4 | 5 | 20 | 2 | 3 |
| 5 | 2020-01-01 | 12 | Monitor | Samsung | Componente | Oficina 5 | Instalado | 4 | 1 | 22 | 5 | 3 |
+----------+------------+----------+-----------------+-------------+------------+-------------+--------------+-----------+---------+----------+---------+---------+
如您所见,'equipamiento' 表有 'fk_ofic' 列,它引用了 'oficina' 表:
+----------+------------+-------------+-----------------+--------------+--------------+-----------+--------+----------+
| id_lugar | desc_lugar | grupo_lugar | dir_lugar | depart_lugar | ciudad_lugar | tel_lugar | fk_dep | fk_grupo |
+----------+------------+-------------+-----------------+--------------+--------------+-----------+--------+----------+
| 1 | Oficina 1 | Oficina | Calle Random 1 | Montevideo | Montevideo | 94132471 | 1 | 5 |
| 2 | Oficina 2 | Oficina | Calle Random 2 | Montevideo | Montevideo | 91356985 | 1 | 5 |
| 3 | Oficina 3 | Oficina | Calle Random 3 | Montevideo | Montevideo | 92358985 | 1 | 5 |
| 4 | Oficina 4 | Oficina | Calle Random 4 | Montevideo | Montevideo | 95355685 | 1 | 5 |
| 5 | Oficina 5 | Oficina | Calle Random 5 | Montevideo | Montevideo | 97356990 | 1 | 5 |
| 6 | Oficina 6 | Oficina | Calle Random 6 | Montevideo | Montevideo | 99344985 | 1 | 5 |
| 7 | Oficina 7 | Oficina | Calle Random 7 | Montevideo | Montevideo | 91234567 | 1 | 5 |
| 8 | Oficina 8 | Director | Calle Random 8 | Montevideo | Montevideo | 91234567 | 1 | 1 |
| 9 | Oficina 9 | Informática | Calle Random 9 | Montevideo | Montevideo | 91234567 | 1 | 2 |
| 10 | Oficina 10 | SubB | Calle Random 10 | Montevideo | Montevideo | 91234567 | 1 | 4 |
| 11 | Oficina 11 | Compras | Calle Random 11 | Montevideo | Montevideo | 91234567 | 1 | 6 |
| 12 | Oficina 12 | Compras | Calle Random 12 | Montevideo | Montevideo | 91234567 | 1 | 6 |
+----------+------------+-------------+-----------------+--------------+--------------+-----------+--------+----------+
如果我在这两个表之间进行内部连接,您可以看到每个办公室安装了哪些设备:
+----------+-----------------+----------+------------+
| id_equip | desc_equip | id_lugar | desc_lugar |
+----------+-----------------+----------+------------+
| 1 | Teclado | 5 | Oficina 5 |
| 2 | Tarjeta Gráfica | 3 | Oficina 3 |
| 4 | Tarjeta de Red | 2 | Oficina 2 |
| 5 | Monitor | 5 | Oficina 5 |
+----------+-----------------+----------+------------+
所以,两个组件安装在一个办公室,办公室 5,一个在办公室 2,一个在办公室 3。根据这些信息,我想为每个办公室添加一个 total_equipment 列。这是想要的结果:
+---------+-------------+----------------------+----------------+----------------+----------------+---------+---------+----------+------------+----------+--------------+
| id_soli | titulo_soli | desc_soli | estado_soli | fecha_ini_soli | fecha_fin_soli | fk_tipo | fk_user | id_lugar | desc_lugar | nom_tipo | total_equip |
+---------+-------------+----------------------+----------------+----------------+----------------+---------+---------+----------+------------+----------+--------------+
| 1 | Solicitud 1 | Descripción | Pendiente Info | 2020-01-01 | NULL | 1 | 4 | 10 | Oficina 10 | Monitor | 0 |
| 13 | 25 Monitor | Dame mmmmmmmaaaaaaas | Pendiente Info | 2021-11-05 | NULL | 1 | 5 | 5 | Oficina 5 | Monitor | 2 |
+---------+-------------+----------------------+----------------+----------------+----------------+---------+---------+----------+------------+----------+--------------+
这是因为第一个请求属于安装了 0 台设备的办公室 10,而第二个请求属于安装了 2 台设备的办公室 5。
对不起,如果我的解释很糟糕,但我无法用其他方式解释它。希望任何人都可以提供帮助。如果您对我的代码有任何疑问,我可以解释。
【问题讨论】:
标签: mysql