SQL:不同数量的数据

SQL:不同数量的数据,sql,Sql,我手头有两个步骤的任务:首先,应该执行某个连接: Select * FROM [my_table2]b left join [my_table3]c on (b.CUSTOMER_PK=c.CUSTOMER_PK) where c.CUSTOMER_PK is null 这非常有效,为我提供了下一步所需的2985行(验证所有接收到的数据是否显示在另一个表中: SELECT * FROM [my_table1]a where a.customer_id in (Selec

我手头有两个步骤的任务:首先,应该执行某个连接:

  Select *
  FROM [my_table2]b
  left join [my_table3]c
  on (b.CUSTOMER_PK=c.CUSTOMER_PK)
  where c.CUSTOMER_PK is null
这非常有效,为我提供了下一步所需的2985行(验证所有接收到的数据是否显示在另一个表中:

SELECT  *
FROM [my_table1]a 
where a.customer_id in (Select b.customer_id 
FROM [my_table2]b
left join [my_table3]c
on (b.CUSTOMER_PK=c.CUSTOMER_PK)
where c.CUSTOMER_PK is null)
出于某种原因,它给了我更多的行—2996行(与所有列名一起使用DISTINCT时的结果相同)。然而,当我试图通过EXCEPT(不支持减号)找出额外的11行是什么时(我只需要在所有表中收到一列数据类型相同的列—decimal(9,0)),我没有结果。知道哪里出了问题吗? 这是第三个问题:

Select customer_id
FROM [my_table1]a 
where a.customer_id in (Select b.customer_id 
FROM [my_table2]b
left join [my_table3]c
on (b.CUSTOMER_PK=c.CUSTOMER_PK)
where c.CUSTOMER_PK is null)
EXCEPT
Select customer_id
FROM [my_table2]b
left join [my_table3]c
on (b.CUSTOMER_PK=c.CUSTOMER_PK)
where c.CUSTOMER_PK is null

谢谢!

您的问题可能是单个客户在第一个表中有多行
my_table1
。您可以通过以下操作查找此类客户:

select a.customer_id, count(*) as cnt
from my_table1 a
group by a.customer_id
having count(*) > 1
order by cnt desc;
当然,这适用于所有值,而不仅仅是匹配值。这可能会让您了解问题所在。否则,请使用相同的方法,但使用
in
子句


问题不在于
b
c
表中的重复项。in子句在输出时不会产生重复项。

第一次选择的一个或多个
客户id
[my\u table 1]
中有多个记录,其中包含相应的
客户id

要找出哪些ID是重复的,您可以使用如下内容

SELECT a.customer_id, count(*)
FROM [my_table1]a 
left join [my_table2]b on (a.customer_id = b.customer_id)
left join [my_table3]c on (b.CUSTOMER_PK = c.CUSTOMER_PK)
where c.CUSTOMER_PK is null
group by a.customer_id
having count(*) > 1