Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一个AltID有多个ID_Sql - Fatal编程技术网

Sql 一个AltID有多个ID

Sql 一个AltID有多个ID,sql,Sql,我有三个表,每个表都有一个Altid-我想匹配Altid上的每个表,并返回每个不匹配的ID 例如: table a Altindx 600650 3970034000 602469 4300221000 611183

我有三个表,每个表都有一个Altid-我想匹配Altid上的每个表,并返回每个不匹配的ID

例如:

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