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
现在的问题是我想检查我的第二个表是否有第一个表的数据。 如果没有,那么如何找到该错误。
(我需要单独显示第二个表的额外行和第二个表的缺失行)
答案 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,'%')