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