SELECT ['VISA CK - 021810$'].[ACCT NBR #1], ['VISA CK - 021810$'].[ALT CUST NM #1], ['VISA CK - 021810$'].[LAST USED]
FROM ['VISA CK - 021810$']
WHERE ['VISA CK - 021810$'].[ALT CUST NM #1]
IN (
SELECT ['VISA CK - 021810$'].[ALT CUST NM #1]
FROM ['VISA CK - 021810$']
GROUP BY ['VISA CK - 021810$'].[ALT CUST NM #1]
HAVING COUNT(['VISA CK - 021810$'].[ALT CUST NM #1]) > 1
)
AND ['VISA CK - 021810$'].[ACCT NBR #1]
IN (
SELECT ['VISA CK - 021810$'].[ACCT NBR #1]
FROM ['VISA CK - 021810$']
GROUP BY ['VISA CK - 021810$'].[ACCT NBR #1]
HAVING COUNT(['VISA CK - 021810$'].[ACCT NBR #1]) > 1
)
0
A
回答
0
使用改写联接:
SELECT t.[ACCT NBR #1],
t.[ALT CUST NM #1],
t.[LAST USED]
FROM ['VISA CK - 021810$'] t
JOIN (SELECT ['VISA CK - 021810$'].[ALT CUST NM #1]
FROM ['VISA CK - 021810$']
GROUP BY ['VISA CK - 021810$'].[ALT CUST NM #1]
HAVING COUNT(['VISA CK - 021810$'].[ALT CUST NM #1]) > 1) x ON x.[ALT CUST NM #1] = t.[ALT CUST NM #1]
JOIN (SELECT ['VISA CK - 021810$'].[ACCT NBR #1]
FROM ['VISA CK - 021810$']
GROUP BY ['VISA CK - 021810$'].[ACCT NBR #1]
HAVING COUNT(['VISA CK - 021810$'].[ACCT NBR #1]) > 1) y ON y.[ACCT NBR #1] = t.[ACCT NBR #1]
确保它返回你所期望的数据 - 后调。假设你提供的查询是正确的,JOIN通常比子查询更受欢迎,但审查和比较执行计划会告诉你什么是最适合你的情况。
0
这是一个有效的SQL结构,但我们无法评论它是否有效。
你的意思是:在['VISA CK - 021810$']
每一行,返回该行,如果我找到他们相对都[ACCT NBR #1]
和[ALT CUST NM #1]
IN子句
0
是的,它会返回良好的数据匹配。 WHERE子句将确保在使用AND时返回任何数据之前,两个IN子句都受到尊重。
+0
这是我第一次用AND来使用多个IN。谢谢你澄清。 – TheDudeAbides 2010-05-11 19:16:54
像这样的列名应该是非法的:) – 2010-05-11 19:11:49
看起来像它会,但我同意尼克,它肯定是痛苦的阅读。当你尝试过它发生了什么? – MJB 2010-05-11 19:13:21
约定!从另一个应用程序导入.csv的结果... – TheDudeAbides 2010-05-11 19:13:36