当没有主键时从mysql表中提取额外的记录

时间:2013-12-06 17:16:03

标签: mysql

我正在尝试查找t1中但不在t2中的所有记录。我知道t1中的记录多于t2中的记录,因为当我运行时

select count(*) 
from t1;

select count(*) 
from t2;

我分别获得了21,500条记录和21,000条记录。但问题是这些表没有规范化,没有主键,因此我不能做这样的事情:

 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比另一个更多。 (邋solution的解决方案,但它能够解决问题)。

2 个答案:

答案 0 :(得分:0)

你有两个问题。一个糟糕的数据库设计和某种虚假数据被插入到你的表中。

我不知道如果没有索引,这是否可行。

左外连接应该让你开始(查找语法)。

你应该得到类似的东西:

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

答案 1 :(得分:0)

尝试通过使用MySQL在'id'上添加主键来修复表:

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