Sql 一个AltID有多个ID
我有三个表,每个表都有一个Altid-我想匹配Altid上的每个表,并返回每个不匹配的ID 例如:Sql 一个AltID有多个ID,sql,Sql,我有三个表,每个表都有一个Altid-我想匹配Altid上的每个表,并返回每个不匹配的ID 例如: table a Altindx 600650 3970034000 602469 4300221000 611183
table a Altindx 600650 3970034000
602469 4300221000
611183 5012600000
612415 2002501930
table b Datindx 600650 3970034001
602469 4300221000
611183 5012600000
612415 2002501931
table c Mtindx 600650 3970034002
602469 4300221001
611183 5012600000
612415 2002501930
按altid排序的数据
a 600650 3970034000
b 600650 3970034001
c 600650 3970034002
a 602469 4300221000
b 602469 4300221000
c 602469 4300221001
a 611183 5012600000
b 611183 5012600000
c 611183 5012600000
a 612415 2002501930
b 612415 2002501931
c 612415 2002501930
报告应如下所示:
600650 3970034000
3970034001
3970034002
602469 4300221000
4300221001
612415 2002501930
2002501931
611183-不应出现在报告上,因为所有id都匹配您有两个字段,如果假设一个是id,两个是值,则SQL查询为:
SELECT * FROM(
SELECT id, value FROM altindex
UNION
SELECT id, value FROM latindex
UNION
SELECT id, value FROM mtindex
) index
ORDER BY index.id ASC, index.value ASC
这将所有的表合并在一起,然后计算每个AltID、ID对出现的次数。出现3次的对将从结果中排除,因为这意味着该对存在于所有三个表中
select AltID, ID
from (
select AltID, ID from Altindx
union all
select AltID, ID from Datindx
union all
select AltID, ID from Mtindx
) x
group by AltID, ID
having COUNT('') < 3
order by AltID, ID
关系划分:这可能与您使用的SQL的风格有关,如果您尝试过什么,请让我们了解更多。答案应该总是有某种解释,而不是“仅仅”代码。
SELECT DISTINCT ID, Value FROM
(
SELECT A as T, ID, Value
FROM altindex
UNION ALL
SELECT B as T, ID, Value
FROM latindex
UNION ALL
SELECT C as T, ID, Value
FROM mtindex
) sublist
WHERE
COUNT(T) OVER (PARTITION BY ID, VALUE) > 1