Sql 如何在顶部选择中标记未选择的记录
我有一个要求,我只需要从一个组中选择一定数量的记录。但是,我还需要在中标记not choosen记录,即使它们需要在以后的日期引用 我在第一段有超过8万张唱片。要求选择50000条记录 我试过这个:Sql 如何在顶部选择中标记未选择的记录,sql,sql-server,Sql,Sql Server,我有一个要求,我只需要从一个组中选择一定数量的记录。但是,我还需要在中标记not choosen记录,即使它们需要在以后的日期引用 我在第一段有超过8万张唱片。要求选择50000条记录 我试过这个: UPDATE mytable SET [SuppressionReason] = 'REC LIMIT REACHED - S1' WHERE [ID] NOT IN ( SELECT TOP 50000 [ID] FROM mytable WHERE
UPDATE mytable
SET [SuppressionReason] = 'REC LIMIT REACHED - S1'
WHERE
[ID] NOT IN
(
SELECT TOP 50000 [ID] FROM mytable
WHERE segment = '1'
);
但是,这会导致0条记录在SuppressionReason字段中标记为“REC LIMIT REACHED-S1”。我遗漏了什么或做错了什么?基于对以下代码的测试,您是否绝对确定您有超过50000条记录
DROP TABLE IF EXISTS #TEMP
CREATE TABLE #TEMP
(
ID INT IDENTITY(1,1),
FIRSTNAME VARCHAR(10),
LASTNAME VARCHAR(10),
SEGMENT INT,
SUPPRESSION VARCHAR(10)
)
INSERT INTO #TEMP
(FIRSTNAME, LASTNAME, SEGMENT)
VALUES
('JOHN', 'KRAMER',1),
('MATT','GEORGE',1),
('PHILIP','MCCAIN',1),
('ANDREW','THOMAS',1)
UPDATE #TEMP
SET SUPPRESSION = 'YEP'
WHERE ID NOT IN
(SELECT TOP(2) ID FROM #TEMP WHERE SEGMENT = 1)
SELECT * FROM #TEMP
这将产生以下输出,我怀疑这正是您期望得到的结果
1 JOHN KRAMER 1 NULL
2 MATT GEORGE 1 NULL
3 PHILIP MCCAIN 1 YEP
4 ANDREW THOMAS 1 YEP
基于以下代码的测试,您是否绝对确定您拥有50000条以上的记录
DROP TABLE IF EXISTS #TEMP
CREATE TABLE #TEMP
(
ID INT IDENTITY(1,1),
FIRSTNAME VARCHAR(10),
LASTNAME VARCHAR(10),
SEGMENT INT,
SUPPRESSION VARCHAR(10)
)
INSERT INTO #TEMP
(FIRSTNAME, LASTNAME, SEGMENT)
VALUES
('JOHN', 'KRAMER',1),
('MATT','GEORGE',1),
('PHILIP','MCCAIN',1),
('ANDREW','THOMAS',1)
UPDATE #TEMP
SET SUPPRESSION = 'YEP'
WHERE ID NOT IN
(SELECT TOP(2) ID FROM #TEMP WHERE SEGMENT = 1)
SELECT * FROM #TEMP
这将产生以下输出,我怀疑这正是您期望得到的结果
1 JOHN KRAMER 1 NULL
2 MATT GEORGE 1 NULL
3 PHILIP MCCAIN 1 YEP
4 ANDREW THOMAS 1 YEP
子查询中有
where segment='1'
,但外部查询中没有。这似乎有点奇怪。您是否检查过从mytable中选择TOP 50000[ID],其中segment='1'返回您期望的结果?是的,仅在SELECT语句中返回记录ID唯一吗?可能只有不到50000个唯一ID。问题中没有足够的信息来重现问题。子查询中有where segment='1'
,但外部查询中没有。这似乎有点奇怪。您是否检查过从mytable中选择TOP 50000[ID],其中segment='1'返回您期望的结果?是的,仅在SELECT语句中返回记录ID唯一吗?可能只有不到50000个唯一ID。问题中没有足够的信息来重现问题。