Sql 减去两个主键为的表
我有sql数据库和表: sc:s_id,m_id s:身份证,姓名 m:身份证,姓名 sc_标准件:s_id,m_id s_standart:身份证,姓名 m_standart:身份证,姓名 sc.s\U id来自s.id,sc.m\U id来自m.id,sc\U standart.s\U id来自s\U standart.id,sc\U standart.m\U id来自m\U standart.id 我应该为sc中不存在于sc标准中的所有sc行设置m_id=null 我已经写过:Sql 减去两个主键为的表,sql,oracle,Sql,Oracle,我有sql数据库和表: sc:s_id,m_id s:身份证,姓名 m:身份证,姓名 sc_标准件:s_id,m_id s_standart:身份证,姓名 m_standart:身份证,姓名 sc.s\U id来自s.id,sc.m\U id来自m.id,sc\U standart.s\U id来自s\U standart.id,sc\U standart.m\U id来自m\U standart.id 我应该为sc中不存在于sc标准中的所有sc行设置m_id=null 我已经写过: SELEC
SELECT s.name, m.name
FROM s
JOIN sc
ON s.id=sc.s_id
JOIN m
ON m.id=sc.m_id
MINUS
SELECT s_standart.name, m_standart.name
FROM s_standart
JOIN sc_standart
ON s_standart.id=sc_standart.s_id
JOIN m_standart
ON m_standart.id=sc_standart.m_id
因此,我应该从上面的选择中更新与(s.name,m.name)相关的(s\u id,m\u id)行。看起来您可以这样做:
update sc
set m_id = null
where not exists
( select 1 from sc_standart s
where s.m_id = sc.m_id )
或使用减号:
update sc
set m_id = null
where m_id in
( select m_id from sc
minus
select m_id from sc_standart )
但是,我可能遗漏了一些内容,因为我看不出其他四个表与您的问题有何关联。如果将sc中不存在于sc标准中的所有行的规则设置为m_id=null,那么其他表与此有何关系?只有sc
和sc_标准
有m_id
列。