在没有主键的情况下从mysql表中提取额外记录

在没有主键的情况下从mysql表中提取额外记录,mysql,Mysql,我试图找到t1中的所有记录,但不在t2中。我知道t1中的记录比t2中的多,因为当我运行时 select count(*) from t1; select count(*) from t2; 我分别得到21500条记录和21000条记录。但问题是这些表没有规范化,没有主键,因此我不能这样做: SELECT id FROM t1 where t1.id not in ( SELECT t2.id FROM t2 where t2.id is no

我试图找到t1中的所有记录,但不在t2中。我知道t1中的记录比t2中的多,因为当我运行时

select count(*) 
from t1;

select count(*) 
from t2;
我分别得到21500条记录和21000条记录。但问题是这些表没有规范化,没有主键,因此我不能这样做:

 SELECT id FROM t1 
    where t1.id
    not in (
    SELECT t2.id
    FROM t2 
    where t2.id is not null);
还是这个

SELECT t1.id, t2.id 
FROM t1
LEFT JOIN t2
ON t1.id = t2.id 
where t2.id is null
由于两者都返回null,由于id号完全匹配,因此似乎有相同数量的id。必须有另一个字段不匹配

更新

我最终做了这样的事:

select id, count(id) 
from t1 
group by id; 
select id, count(id) 
from t2 
group by id 

它给出了相同数量的索赔编号和它出现的次数。我将它复制并粘贴到excel中,只需从另一个表中减去一个计数,然后进行条件格式设置,只显示不为零的计数,这就为我提供了在一个表中显示的所有ID多于另一个表中显示的ID。(解决方案很草率,但它能够解决问题)。

您有两个问题。一个糟糕的数据库设计和某种程度上虚假的数据正在插入到您的表中

我不知道在没有索引的情况下这是否有效

一个左外部联接应该可以让您开始(查找语法)

你应该以这样的方式结束:

t1.id   t2.id
1        1
2        2
3        null
4        4

尝试通过使用MySQL在两个表的“id”上添加主键来修复表:

ALTER TABLE t1 ADD PRIMARY KEY (id)
ALTER TABLE t2 ADD PRIMARY KEY (id)

这些表不是表。@草莓为什么?在RDBMs中,PK是表定义的先决条件。但它们是表@草莓,如果表=单元格的矩形数组…:)你检查过id为空的行了吗?实际上,你可能需要一个完整的外部连接。它会抱怨重复,虽然有重复的id,但是与id相关的东西是不重复的。我得去规范他们的整个数据库..删除了对Steve的引用。