我有以下表结构
table 1
ID SOURCE_ID NAME
1 1 A
2 1 B
3 2 B
4 2 C
5 2 A
我需要选择在所有SOURCE_ID中共同的名称,因此我希望名称A和B在SOURCE_ID 1,2中都存在。
以下查询为我提供了预期的输出:
SELECT DISTINCT NAME
FROM TABLE1 A, TABLE1 B
WHERE A.NAME = B.NAME AND A.SOURCE_ID != B.SOURCE_ID
现在,当表中的数据更改为包含新记录ID 6
时table 1
ID SOURCE_ID NAME
1 1 A
2 1 B
3 2 B
4 2 C
5 2 A
6 3 A
所有三个SOURCE_ID(1,2,3)IS A中常见的名称。
我的查询无法在输入新记录时返回正确的输出。
请在插入新记录时向我提供一个可正常运行的查询。
答案 0 :(得分:1)
看看像
这样的东西DECLARE @Table TABLE(
SOURCE_ID INT,
NAME VARCHAR(20)
)
INSERT INTO @Table SELECT 1,'A'
INSERT INTO @Table SELECT 1,'B'
INSERT INTO @Table SELECT 2,'B'
INSERT INTO @Table SELECT 2,'C'
INSERT INTO @Table SELECT 2,'A'
--INSERT INTO @Table SELECT 3,'A'
;WITH DistinctCount AS (
SELECT NAME,
COUNT(DISTINCT SOURCE_ID) Cnt
FROM @Table
GROUP BY NAME
)
SELECT *
FROM DistinctCount
WHERE Cnt = (SELECT COUNT(DISTINCT SOURCE_ID) FROM @Table)
在第6个插入注释掉后,应该返回A和B,包括它,应该返回A