Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何获取同一表中另一列的值作为引用_Mysql - Fatal编程技术网

Mysql 如何获取同一表中另一列的值作为引用

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

我想使用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_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