此论坛的新手,以及SQL新手。我正在尝试清理一些数据并解决错误。我有两个表,它们共享列FILENAME,TYPE,SEC,我想从两个表中提取任何记录,其中SEC和TYPE之间存在一对多的关系,任何有SEC和TYPE的地方只有一个一个关系可以被忽略,被认为是有效的。
例如, 我有表1。
FILENAME TYPE SEC
a----------------x----1
b----------------x----2
c----------------y----1
d----------------y----3
表2中的我会有类似的东西,
FILENAME TYPE SEC
e----------------x----1
f----------------x----2
g----------------z----1
h----------------y----3
所以我想要一个可以找到的查询
FILENAME TYPE SEC
a----------------x----1
c----------------y----1
e----------------x----1
g----------------z----1
我的数据库非常庞大,非常感谢任何帮助!
感谢。
答案 0 :(得分:1)
select t1.sec, t1.type, count(*) from table1 as t1
join table2 as t2 on t1.sec = t2.sec and t1.type = t2.type
group by t1.sec, t1.type
having count(*) > 1
编辑:这不是你提出的问题,它会显示哪些记录有多条记录,但它们会被分组。
答案 1 :(得分:0)
您需要找到具有多个sec
的{{1}}的值。以下查询执行此操作,它应该适用于任何数据库:
type
根据数据库的不同,可能有更有效的查询方式。
答案 2 :(得分:0)
select 'table1' which, t.*
from (
select sec, min(type) typea, max(type) typeb
from table1
group by sec
having min(type) <> max(type)
) x
join table1 t on t.sec = x.sec
UNION ALL
select 'table2', t.*
from (
select sec, min(type) typea, max(type) typeb
from table1
group by sec
having min(type) <> max(type)
) x
join table2 t on t.sec = x.sec
第二个只复制第一个,使用UNION ALL
组合