【问题标题】:SQL Subquery with Exists存在的 SQL 子查询
【发布时间】:2018-03-09 12:24:40
【问题描述】:

我有一个场景可以用 3 个表格来描述;成员、角色和成员角色。 Memberrole 是其他两个的交集,我想用外部连接(来自成员和角色)完全填充它。这是最容易的部分。

现在我希望能够为新成员或新角色更新交集。

我想要完成的看起来像这样(但语法不正确):

insert into memberrole (memberid,roleid)  
    select member.memberid, role.roleid 
    from member, role 
    where member.memberid, roleid not exists (select memberid, roleid 
                                              from memberrole)

...有什么建议吗? 谢谢

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需结果。同时标记您正在使用的数据库。
  • where (member.memberid, roleid) not in (select ...) 或使用共同相关的子查询 where not exists (select ... where ...)
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 多年前),不鼓励使用它

标签: sql subquery exists


【解决方案1】:
INSERT into memberrole (memberid,roleid)
SELECT m.memberid, r.roleid
FROM member m
JOIN zrole r -- carthesian product MINUS the inner product
        ON NOT EXISTS (select *
        FROM memberrole mr
        WHERE mr.memberid = m.memberid
        AND mr.roleid = r.roleid
    );

注意:role 是保留字。我将其替换为 zrole

【讨论】:

  • 超级,非常感谢乔普。我已经离开代码几年了,只是看不透解决方案。太棒了!
猜你喜欢
  • 2018-01-24
  • 2017-10-04
  • 2020-06-21
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
相关资源
最近更新 更多