我有几个表的数据从一个网页的请求。问题是,我做了一些内部连接来合并来自请求表中的外键的数据,但我想添加一个列,该列统计发送请求的办公室总共拥有的各个设备。
下面是我的代码,可以更好地理解我的要求。
我的问题是:
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 |
+----------+-----------------+----------+------------+
因此,两个组件安装在一个office中,Office5中,一个在ofice 2中,一个在ofice 3中。基于此信息,我想为每个office添加一列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。
如果我的解释很糟糕,我很抱歉,但我不能用另一种方式解释它。希望有人能帮上忙。如果你对我的代码有任何疑问,我可以解释。
发布于 2021-11-06 13:24:01
当我正确理解您的描述时,这应该是可行的:
SELECT
realiza_soli.*,
oficina.id_lugar,
oficina.desc_lugar,
tipo_equipamiento.nom_tipo,
(SELECT COUNT(*) FROM equipamiento WHERE equipamiento.fk_ofic = oficina.id_lugar) as total_equip
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;
https://stackoverflow.com/questions/69867610
复制相似问题