Mysql 如何获取同一表中另一列的值作为引用
我想使用COUNT生成一个名为port_filled in m_olt_port的列,其中行的值是基于另一个表total value生成的,它是m_odp,具有相同的id引用。我希望达到的效果如下表所示: m_olt_端口 m_odp本身是这样的:Mysql 如何获取同一表中另一列的值作为引用,mysql,Mysql,我想使用COUNT生成一个名为port_filled in m_olt_port的列,其中行的值是基于另一个表total value生成的,它是m_odp,具有相同的id引用。我希望达到的效果如下表所示: m_olt_端口 m_odp本身是这样的: SELECT m_olt_port.*, (SELECT COUNT(m_odp.id_olt_port) FROM m_odp JOIN m_olt_port ON m_odp.id_olt_port = m_olt_port.id_ol
SELECT
m_olt_port.*,
(SELECT COUNT(m_odp.id_olt_port)
FROM m_odp
JOIN m_olt_port ON m_odp.id_olt_port = m_olt_port.id_olt_port
WHERE m_odp.id_olt_port = 3) AS port_filled,
m_olt_port.id_olt_port
FROM m_olt_port
m_odp
我尝试过的代码是通过使用嵌套选择从m_odp表中获取要显示在m_olt_端口表中的值,如下所示:
SELECT
m_olt_port.*,
(SELECT COUNT(m_odp.id_olt_port)
FROM m_odp
JOIN m_olt_port ON m_odp.id_olt_port = m_olt_port.id_olt_port
WHERE m_odp.id_olt_port = 3) AS port_filled,
m_olt_port.id_olt_port
FROM m_olt_port
但问题是,我不能得到正确的值来填充内部条件,这使得结果是错误的,就像这样:
SELECT
m_olt_port.*,
(SELECT COUNT(m_odp.id_olt_port)
FROM m_odp
JOIN m_olt_port ON m_odp.id_olt_port = m_olt_port.id_olt_port
WHERE m_odp.id_olt_port = 3) AS port_filled,
m_olt_port.id_olt_port
FROM m_olt_port
结果
我认为问题在于嵌套的where条件,即m_odp.id_olt_port=3。我认为,如果3是动态变化的,匹配m_olt_port和m_odp之间的id_olt_port的值,它将根据它们的总计数生成不同的行
但我怎样才能做到这一点呢
小提琴
无法获得显示的结果-m_odp表中没有提供端口4-8存在的源数据。您在没有提供背景信息的情况下直接进入了问题。什么是输入表,什么是输出,以及输出背后的逻辑是什么?提供表创建表+插入脚本,而不是表格式的内容。解释源和结果之间的关系-一列一列。好的,对不起,我认为表格形式的内容足以解释这种关系。。我将把它输入postFor,以从m_odp数据获取m_olt_端口数据,使用简单的SELECT id_olt_端口,按id_olt_端口从m_odp组中计数*@Akina是的,我认为group by是正确的功能。我也应该使用Join吗?我修改完密码后会告诉你的啊,给你。。因此,基本上没有办法在m_odp???@MuhammadFaisal中显示结果为0的剩余数字4-8,也没有办法在m_odp???中显示结果为0的剩余数字4-8,也没有办法在m_odp???中显示结果为0的剩余数字4-8??基本上-没有办法理解上限是什么-它是8,或,例如,14,或23?服务器无法返回缺少的信息。嗯,好吧,那么,我想我应该找到另一种方法。。谢谢!
╔═════════════╦═════════════╗
║ id_olt_port ║ port_filled ║
╠═════════════╬═════════════╣
║ 1 ║ 5 ║
╠═════════════╬═════════════╣
║ 2 ║ 5 ║
╠═════════════╬═════════════╣
║ 3 ║ 5 ║
╠═════════════╬═════════════╣
║ 4 ║ 5 ║
╠═════════════╬═════════════╣
║ 5 ║ 5 ║
╠═════════════╬═════════════╣
║ 6 ║ 5 ║
╠═════════════╬═════════════╣
║ 7 ║ 5 ║
╠═════════════╬═════════════╣
║ 8 ║ 5 ║
╚═════════════╩═════════════╝
CREATE TABLE m_odp (id_odp INT, id_olt_port INT);
INSERT INTO m_odp VALUES
(1,1),
(2,1),
(3,2),
(4,2),
(5,2),
(6,3),
(7,3),
(8,3),
(9,3),
(10,3);
SELECT * FROM m_odp;
id_odp | id_olt_port
-----: | ----------:
1 | 1
2 | 1
3 | 2
4 | 2
5 | 2
6 | 3
7 | 3
8 | 3
9 | 3
10 | 3
SELECT id_olt_port, COUNT(*) FROM m_odp GROUP BY id_olt_port;
id_olt_port | COUNT(*)
----------: | -------:
1 | 2
2 | 3
3 | 5