如果在列中找到特定值,我正在尝试更新标志。例如,如果在key2的整个列中找到key1,则flag为Y,否则为N。
我在下面写了这个查询,但它失败了:
UPDATE dbo.WRK_DATA
SET flag = CASE WHEN EXISTS (SELECT * FROM dbo.WRK_DATA WHERE key1 = key2)
THEN 'Y'
ELSE 'N' END
见下表:
key1| key2 | Flag
20a | 10a | N
45a | 35a | Y
55a | 45a | N
45a | 35a | Y
提前致谢。
答案 0 :(得分:3)
您也可以将此短语称为更新自我加入:
UPDATE a
SET flag = CASE WHEN b.key2 IS NOT NULL THEN 'Y' ELSE 'N' END
FROM dbo.WRK_DATA a
LEFT JOIN dbo.WRK_DATA b
ON a.key1 = b.key2;
或者,如果你想坚持目前的方法,那么看看戈登的答案。
答案 1 :(得分:0)
您需要表别名:
update d1
set flag = (case when exists (select 1
from dbo.WRK_DATA d2
where d1.key1 = d2.key2
)
then 'Y' else 'N'
end)
from dbo.WRK_DATA d1;
答案 2 :(得分:0)
CREATE TABLE #temp
(
key1 VARCHAR(3) ,
key2 VARCHAR(3) ,
Flag CHAR(1)
);
INSERT INTO #temp
( key1, key2, Flag )
VALUES ( '20a', -- key1 - varchar(3)
'10a', -- key2 - varchar(3)
'' -- Flag - char(1)
),
( '45a', -- key1 - varchar(3)
'35a', -- key2 - varchar(3)
'' -- Flag - char(1)
),
( '55a', -- key1 - varchar(3)
'45a', -- key2 - varchar(3)
'' -- Flag - char(1)
),
( '45a', -- key1 - varchar(3)
'35a', -- key2 - varchar(3)
'' -- Flag - char(1)
),
( '45a', -- key1 - varchar(3)
'45a', -- key2 - varchar(3)
'' -- Flag - char(1)
);
UPDATE a
SET Flag = CASE WHEN b.key2 = a.key1 THEN 'Y'
ELSE 'N'
END
FROM #temp a
LEFT JOIN #temp b
ON a.key1 = b.key2;
SELECT *
FROM #temp;
DROP TABLE #temp;