我手头有两步任务:首先,应该执行某个连接:
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(不支持MINUS)的额外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
谢谢!
答案 0 :(得分:1)
第一个选择中的一个或多个customer_id
包含多个记录,customer_id
中有[my_table1]
个。{/ p>
要找出哪些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
答案 1 :(得分:0)
您的问题可能是单个客户在第一个表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
子句在输出时不会产生重复。