sql - 递归sql问题

标签 sql

我有一个问题,希望通过 SQL 查询解决。这将
用作 PoC(概念证明)。

问题:

产品供应由一个或多个产品实例组成,一个产品
实例可以属于许多产品。
这可以在表格中实现:

PO | PI

-----

A | 10

A | 11

A | 12

B | 10

B | 11

C | 13

现在我想从一组产品实例中取回产品报价。
例如。如果我们发送 10,11,13 返回的预期结果是 B & C,如果我们发送
只有 10 那么结果应该是 NULL 因为没有产品供应是由
只有 10。发送 10、11、12 将导致 A(不是 A 和 B,因为 12 本身不是有效的产品报价)。

先决条件:
发送的产品实例组合只能产生一个特定的
产品组合,因此每个查询只有一种解决方案。

最佳答案

好吧,我想我有。这符合您提供的限制条件。可能有一种方法可以进一步简化这一点,但它有点吃我的大脑:

select distinct PO 
from POPI x 
where 
  PO not in (
    select PO 
    from POPI 
    where PI not in (10,11,12)
  ) 
  and PI not in (
    select PI 
    from POPI 
    where PO != x.PO 
      and PO not in (
        select PO 
        from POPI 
        where PI not in (10,11,12)
      )
  );

这只会产生填充给定集合的结果,这些结果与所有其他结果不相交,我 是你所要求的。对于给出的测试示例:
  • 提供 10,11,12 yield A
  • 提供 10,11,13 yield B,C
  • 关于sql - 递归sql问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/378040/

    相关文章:

    sql - 如何在 Sql Server 和过滤器记录中对集合进行分组

    sql - Laravel Carbon 使用 sameDay() 查询日期

    MySQL select 看起来很慢但是想不出如何改进?

    sql - 如何使用 SQL 从表中创建矩阵类型结果

    mysql - 具体的Mysql Select查询需要帮助

    mysql - 如何组合两个查询,以便一个查询的结果将用于另一个查询?

    mysql - 在 node.js 上使用 coalesce 和 sequelize

    mysql - 如何在单个查询的不同列中获取奇数 ID?

    sql - 使用 CTE 插入雪花

    sql - 子查询出现问题,字段不存在,但优点是给我结果