计算来自 2 个不同表的 2 行之间的不匹配 - MySQL
Posted
技术标签:
【中文标题】计算来自 2 个不同表的 2 行之间的不匹配 - MySQL【英文标题】:Count dismatch between 2 rows from 2 different tables - MySQL 【发布时间】:2019-01-15 12:38:26 【问题描述】:我有一个包含 2 个表的数据库。 table1 和 table2。
Table1 包含测试列表(列 'name' )。我想根据 table1 的测试列表计算 table2 中缺少多少行(此表还有一个列 'name' )强>。 所以我只想统计table1.name和table2.name之间的不匹配。
我尝试了几个查询,但都没有真正起作用。 我尝试使用 'NOT IN' 语句,但它需要太多时间。大概几分钟。
例如,输出应该是:
COUNT(*) = 20
这意味着 table2 中缺少 20 个测试(或尚未完成)。
我使用的是 mysql,所以不能使用 EXCEPT 或 MINUS 语句。
提前谢谢你。
诺丁
【问题讨论】:
***.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的主要内容,如果未能解决你的问题,请参考以下文章