在多值列中查找值

问题描述 投票:0回答:2

我有2个表如下:

Tam尝试从Dep表中获取每个员工的部门名称(表Emp表中的DepName列):

我写了这个查询:

update Emp
 set DepName= (
 select DepName
 from Dep
where array_to_string(EmpID, ',') like EmpID
);

虽然我没有收到任何错误,但它没有使用所请求的信息更新表Emp。有帮助吗?

sql postgresql sql-update
2个回答
1
投票

你可以做:

update emp
    set dept = d.depname
    from dep
    where emp.empid = any (dep.empid);

指出这一点后,你不应该这样做。相反,我建议你有一个到department表的正确链接,并使用join来引入部门名称。


0
投票

你必须将id int转换为字符变化数组数据类型,然后使用包含表运算符的contains运算符并像往常一样更新

    UPDATE emp  t1
    SET dept = dname
   from  dept t2
   where  t2.eid @> concat(concat('{',(t1.id::text)),'}') ::varchar[]

https://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=e5c24b26b3479b68adf0b17c2050f715

© www.soinside.com 2019 - 2024. All rights reserved.