如何在mysql中检查mysql规范化表是否正常

时间:2012-03-23 13:03:30

标签: mysql normalization

MY基表有两个列,假设为col1,col2。 col1具有id,col2具有许多逗号分隔值colm1是主键。 像

  col1        col2
 ---------------------
  123        (22,34,12)
  124        (45,67,11)

现在我有另一张表格,其中第一张表格的标准化形式为

col1     col2
---------------
123       22 
123       34
123       12
124       45 
124       67

现在的问题是我想检查我的第二个表是否有第一个表的数据。 如果没有,那么如何找到该错误。

(我需要单独显示第二个表的额外行和第二个表的缺失行)

4 个答案:

答案 0 :(得分:0)

这样的事情。但未经证实

select col1, col2 from old_table 
left outer join (select col1, group_concat(col2 separator ',') as col2
            from new_table
            group by col1) as new_table 
on new_table.col1 = old_table.col1 and new_table.col2 = old_table.col2

答案 1 :(得分:0)

获取游标或记录集,然后您将对表1中的所有记录进行循环,

rs_col1 = id rs_col2 =逗号分隔值

为rs中的每条记录      select * from table_2,其中id = rs_col1,table_2.col2不在(rs_col2) 环

答案 2 :(得分:0)

我认为您的非标准化数据不太有用,因为数据没有排序,因此您无法使用group_concat。但是,您可以通过使用find_in_set并计算col2(非标准化表)中按col1分组的col2(规范化表)的匹配数量来找到解决方案。然后,您必须确保匹配数量等于多值单元格中的元素数量。

答案 3 :(得分:0)

感谢大家的建议。 我通过此查询获得了解决方案

选择* table1作为 将table2连接为b 在a.col1 = b.col1 其中a.col2不喜欢concat('%',b.col2,'%')