计算来自 2 个不同表的 2 行之间的不匹配 - MySQL

Posted

技术标签:

【中文标题】计算来自 2 个不同表的 2 行之间的不匹配 - MySQL【英文标题】:Count dismatch between 2 rows from 2 different tables - MySQL 【发布时间】:2019-01-15 12:38:26 【问题描述】:

我有一个包含 2 个表的数据库。 table1table2

Table1 包含测试列表(列 'name' )。我想根据 table1 的测试列表计算 table2 中缺少多少行(此表还有一个列 'name' )强>。 所以我只想统计table1.name和table2.name之间的不匹配。

我尝试了几个查询,但都没有真正起作用。 我尝试使用 'NOT IN' 语句,但它需要太多时间。大概几分钟。

例如,输出应该是:

COUNT(*) = 20

这意味着 table2 中缺少 20 个测试(或尚未完成)。

我使用的是 mysql,所以不能使用 EXCEPTMINUS 语句。

提前谢谢你。

诺丁

【问题讨论】:

***.com/help/mcve 你可以查看我的回答,希望能解决你的问题 【参考方案1】:

您可以使用not exists

select count(*)
from table1 t1
where not exists (select 1 from table2 t2 where t2.name = t1.name);

如果您在table1 中有重复的name,那么您需要使用count(distinct t1.name)

【讨论】:

我试过了,但就像'NOT IN'语句一样,当我使用它时,数据库冻结并且需要很长时间才能完成请求。【参考方案2】:

试试下面的查询:

select count(case when bname is null then 1 end)
from
(
select a.name as aname, b.name as bname from 
table1 a left join table2 b
on a.name=b.name)x

【讨论】:

我正在尝试,但它不起作用。我应该写什么而不是 a 和 b ?我用我的表名替换了 table1 和 table2。 name 已经是我的列名。但是a和b呢? 修改查询,a和b只是表名别名 谢谢。这是我的完整查询: select count(case when b.test_name is null then 1 end) from (select a.test_name, b.test_name from list_52 a left join motorcontroltests b on a.test_name=b.test_name)x 我有一个错误。告诉我“test_name”字段已被使用。 select count(case when test_nameb is null then 1 end) from ( select a.test_name as test_namea, b.test_name as test_nameb from list_52 a left join motorcontroltests b on a.test_name=b.test_name) x 我已经修改了查询,请检查一下。并且由于您无法选择相同名称的 2 列而发生此错误 谢谢。我已经离开办公室了。明天我会联系你的!【参考方案3】:

MINUS 可以在 MySQL 中使用。 参考:http://www.mysqltutorial.org/mysql-minus/

试试这个:

SELECT name
FROM table1
MINUS
SELECT name
FROM table2

【讨论】:

我试过了,但它不起作用。 MINUS 语句有问题。我正在使用带有 WAMP 和 phpMyAdmin 的 MySQL。

以上是关于计算来自 2 个不同表的 2 行之间的不匹配 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章

计算 2 个不同表的输出之间的除法

计算 2 行 2 个不同表的平均值

在 MSSM 中使用标量值函数和来自 2 个表的数据

如何更有效地计算 n 个字符串之间的不匹配分数?

2个不同数组中的不匹配元素[重复]

匹配来自不同表的行 - MySQL