减去两个带有主键的表

时间:2018-08-29 14:45:15

标签: sql oracle

我有带有表的sql数据库:

  

sc:s_id,m_id

     

s:ID,名称

     

m:ID,名称

     

sc_standart:s_id,m_id

     

s_standart:ID,名称

     

m_standart:ID,名称

sc.s_id来自s.id,sc.m_id来自m.id,sc_standart.s_id来自s_standart.id,sc_standart.m_id来自m_standart.id。

我应该为sc中的所有sc_standart中不存在的行设置m_id = null。

我已经写过:

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_id,m_id)行。

1 个答案:

答案 0 :(得分:0)

您似乎可以按照以下方式进行操作:

update sc
set    m_id = null
where  not exists
       ( select 1 from sc_standart s
         where  s.m_id = sc.m_id )

或使用minus

update sc
set    m_id = null
where  m_id in
       ( select m_id from sc
         minus
         select m_id from sc_standart )

但是,由于看不到其他四个表与您的问题之间的关系,我可能会遗漏一些东西。