MYSQL具有(不是)行数()的属性,为什么它返回不同的行数

MYSQL具有(不是)行数()的属性,为什么它返回不同的行数,mysql,having,Mysql,Having,我有一个简单的疑问: 选择 定义.rowid, 查斯, (按字符排序,定义.rowid)上的行号()为nr 根据定义 definitions.word=words.rowid上的内部连接词 其中definitions.valid=True 字符数大于20的 在我的电脑(英特尔)上,它返回36k条记录 但在客户端计算机(ryzen 2990wx)上,它返回99k条记录(没有工作记录-字符从表1开始) 如果我删除join,它在两台计算机上都正常工作 如果我删除行号,它在两台计算机上也可以正常工作

我有一个简单的疑问:

选择
定义.rowid,
查斯,
(按字符排序,定义.rowid)上的行号()为nr
根据定义
definitions.word=words.rowid上的内部连接词
其中definitions.valid=True
字符数大于20的
在我的电脑(英特尔)上,它返回36k条记录

但在客户端计算机(ryzen 2990wx)上,它返回99k条记录(没有工作记录-字符从表1开始)

如果我删除join,它在两台计算机上都正常工作

如果我删除行号,它在两台计算机上也可以正常工作

如果我将“having”替换为“and”,那么它在两台计算机上都可以正常工作

两台计算机上都有相同版本的mysql(8.018)和相同的表

我明天有个报告-我需要一些想法

CREATE TABLE `definitions` (
    `rowid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `word` INT(10) UNSIGNED NULL DEFAULT NULL,
    `definition` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',
    `chars` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
    `difficult` TINYINT(3) UNSIGNED NULL DEFAULT '99',
    `islocked` BIT(1) NULL DEFAULT b'0',
    `valid` BIT(1) NULL DEFAULT b'0',
    PRIMARY KEY (`rowid`),
    INDEX `word` (`word`)
)
COLLATE='utf8_polish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=100038
;


CREATE TABLE `words` (
    `rowid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `word` VARCHAR(64) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',
    `display` VARCHAR(64) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',
    `difficult` TINYINT(4) UNSIGNED NULL DEFAULT NULL,
    `islocked` BIT(1) NULL DEFAULT NULL,
    `valid` BIT(1) NULL DEFAULT NULL,
    PRIMARY KEY (`rowid`),
    INDEX `word` (`word`),
    INDEX `display` (`display`)
)
COLLATE='utf8_polish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=57009
;
两台计算机上的创建代码相同-由同一instalator创建。。。
查询是表浏览器/编辑器的一部分,具有即时加载功能(虚拟模式下的datagridview),因此很难在夜间修改其逻辑,因为它与GROUP by一起用于过滤聚合数据。在您的情况下,您应该只添加字符20>WHERE子句AS和字符20>/P>请考虑您的问题向我们展示您的表定义。请介绍一下你的问题背景。电脑的品牌和型号与这个案子无关。数据库表的内容几乎肯定是这样的,而且它们在您的机器和客户的机器之间几乎肯定是不同的。只有当查询使用
GROUP BY
或其他聚合函数时,
HAVING
子句才有意义。此查询是自动生成的(取决于用户如何筛选/排序表)-GROUP BY经常出现在那里