【问题标题】:Select primary keys that do not have foreign keys or not have enough foreign keys选择没有外键或没有足够外键的主键
【发布时间】:2017-09-26 21:43:17
【问题描述】:

我想获取所有没有外键或没有足够数量的费用ID作为confirmation_to_supply

例如,

Charge Table:
 id
 confirmation_to_supply

Pay Table:
 id
 charge_id

让我们设置一些价值

Charge Table:
 id: 1  confirmation_to_supply: 1
 id: 2  confirmation_to_supply: 2
 id: 3  confirmation_to_supply: 3

Pay Table:
 id: 1 charge_id: 2
 id: 2 charge_id: 2
 id: 3 charge_id: 3

结果应该是

charge_id
-----------
    1
    3

所以应该出现 1,因为在支付表中没有这样的外键
并且应该出现3,因为charge table中没有足够的外键作为confirmation_to_supply。

我的问题和这个很相似:Selecting primary keys that do not have foreign keys in another table

 select char.id
 from Charge AS char
 left outer join Pay AS p on p.charge_id = char.id
 where p.charge_id is null 

这个查询只给出空值

  charge_id
-----------
    1

我还需要获取 id 3。

谢谢

【问题讨论】:

    标签: sql sqlite join


    【解决方案1】:

    您可以使用 group by 和 having 子句来做到这一点:

    select char.id
    from Charge AS char
    left outer join Pay AS p on p.charge_id = char.id
    group by char.id, char.confirmation_to_supply
    having count(p.charge_id) < confirmation_to_supply
    

    【讨论】:

    • 非常感谢您的快速答复!
    【解决方案2】:

    如果您在 WHERE 语句中添加一个 OR 以显示外键数小于 2 的键会怎样。

    select char.id
     from Charge AS char
     left outer join Pay AS p on p.charge_id = char.id
     where p.charge_id is null OR (SELECT COUNT(p.charge_id) FROM Pay) < 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      相关资源
      最近更新 更多