【问题标题】:UniVerse TCL line JOIN syntaxUniVerse TCL 行 JOIN 语法
【发布时间】:2015-07-06 15:47:33
【问题描述】:

我正在尝试加入两个表;产品和 PSUB。

PRODUCT 包含每个 PRODUCT_ID 的一行数据

PSUB 包含每个 PRODUCT_ID 事务的多行数据,但是 PRODUCT_ID 不是多值的。

这是两个表在两个特定 ID 上的输出。

我想加入表格,运行两个报告:

  1. 显示 PRODUCT 表中的 PRODUCT_IDS,但排除 PSUB 表中的那些。

  2. 显示 PSUB 表中的所有 PRODUCT_ID,但排除 PRODUCT 表中的那些。

这是我试图用来获取 COUNT 的方法,但是,查询基本上被锁定了:

从 PRODUCT、PSUB 中选择 COUNT (*),其中 PRODUCT.PRODUCT_ID PSUB.PRODUCT_ID;

这里是单独的 COUNT 个查询。

提前感谢您的帮助!!

汤姆

【问题讨论】:

    标签: sql


    【解决方案1】:

    1) 使用WHERE NOT EXISTS 的示例,也可以通过使用连接等来完成。

    SELECT
    p.product_id
    FROM
    product p
    WHERE NOT EXISTS ( SELECT product_id FROM psub );
    

    2) 就像第一个示例一样,您只需要交换表即可。

    使用NOT IN的另一种解决方案:

    SELECT
    p.product_id
    FROM
    product p
    WHERE p.product_id NOT IN ( SELECT product_id FROM psub );
    

    另一个使用LEFT JOIN

    SELECT
    p.product_id
    FROM
    product p
    LEFT JOIN psub b ON p.product_ID = b.product_id
    WHERE
    b.product_id IS NULL;
    

    【讨论】:

    • 谢谢,但是在这两个查询中都尝试过,返回“0 条记录”。
    • 我添加了另一个解决方案,如果这不起作用,请仅检查子查询,如果它至少返回某些内容)。
    • 我针对特定 ID 进行了测试。 SELECT p.product_id FROM product p LEFT JOIN psub b ON p.product_ID = b.product_id WHERE b.product_id = 1771356;问题:是否有可能,查询需要一个“unnest”,因为在 PSUB 中可以有多个记录用于 PRODUCT 中与同一 Product_ID 相关的每条记录。 >> 似乎遇到了 LOOP 问题,不得不终止进程。
    • 查询没有问题。这是非常基本的 SQL 连接。它不能陷入循环。如果表很大(或缺少适当的索引),它可能会运行一段时间,甚至几分钟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多