我需要在比较两个表中的数据后填充flag列。 我有表A和表B.
表A:
NAME----PHONE-----ID1---------ID2
MAT------123456-----0.123-----2.123
NICK-----234672----123-------234
SAM-----111111-----456------987
表B列是 ID_A,ID_B,ID_C,ID_D ,,,依此类推...并且数据类似于表A中的ID1和ID2
如果表A中的ID1或ID2与表b中相应行的任何值匹配,则将'Y'放在表B的标志列上。 要求非常直接,但我不知道如何开始编码。非常感谢。
答案 0 :(得分:0)
如果我理解正确,您可以使用case
语句和exists
条款执行此操作:
select b.*,
(case when exists (select 1
from tableA a
where a.id1 in (b.id_a, b.id_b, b.id_c, b.id_d) or
a.id2 in (b.id_a, b.id_b, b.id_c, b.id_d)
)
then 'Y'
else 'N'
end) as flag
from tableB b;
编辑:
如果您确实想要更新:
update b
set flag = (case when exists (select 1
from tableA a
where a.id1 in (b.id_a, b.id_b, b.id_c, b.id_d) or
a.id2 in (b.id_a, b.id_b, b.id_c, b.id_d)
)
then 'Y'
else 'N'
end);
答案 1 :(得分:0)
试试这个:
UPDATE b
SET Flag = CASE WHEN EXISTS
(
SELECT x.ID FROM
(
SELECT b.ID_A UNION ALL
SELECT b.ID_B UNION ALL
SELECT b.ID_C UNION ALL
SELECT b.ID_D UNION ALL
SELECT b.ID_E
) x(ID) WHERE x.ID IS NOT NULL
INTERSECT
SELECT y.ID FROM dbo.TableA a CROSS APPLY
(
SELECT a.ID1
UNION ALL
SELECT a.ID2
) y(ID) WHERE y.ID IS NOT NULL
) THEN 'Y' ELSE 'N' END
FROM dbo.TableB b;