gpt4 book ai didi

sql - 连接两个表并从它们中获取输出

转载 作者:行者123 更新时间:2023-12-01 04:03:24 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
SQL Query JOIN with Table



如果这是TestingTable1中的数据
BUYER_ID  |   ITEM_ID       |  CREATED_TIME
----------+-----------------+----------------------
1345653 151851771618 2012-07-09 19:57:33
1345653 110909316904 2012-07-09 21:29:06
1345653 221065796761 2012-07-09 19:31:48

如果这是 TestingTable2 中的以下数据
USER_ID  |   PRODUCT_ID    |    LAST_TIME
---------+----------------+-----------------------
1345653 150851771618 2012-07-09 19:57:33
1345653 110909316904 2012-07-09 22:29:06
1345653 221165796761 2012-07-09 12:31:48

我需要在 TestingTable2TestingTable1 上比较 BUYER_IDUSER_ID 。我需要看看,如果 BUYER_IDUSER_ID 匹配,那么我需要将 ITEM_IDPRODUCT_IDCREATED_TIMELAST_TIME 进行比较,如果在与其中一个或两个中的 TestingTable2 比较后 TestingTable1 不匹配,那么我需要显示结果。

所以如果你看上面的例子 - 我基本上有三个场景
  • 首先-在 TestingTable1 中,第一行中 ITEM_IDPRODUCT_ID 第一行中的 TestingTable2 不匹配,但 CREATED_TIME 与两个表中第一行的 LAST_TIME 匹配
  • 其次-在 TestingTable1 中,在第二行 CREATED_TIMELAST_TIME 的第二行中的 TestingTable2 不匹配,但 ITEM_ID 与两个表中第二行的 PRODUCT_ID 匹配
  • 第三 - 在 TestingTable1 中,在第三行 ITEM_IDPRODUCT_ID 不匹配,而且 CREATED_TIMELAST_TIME 不匹配,因此在第三行中,它们都与 TestingTable1 第三行不匹配。

  • 所以这是我在比较 TestingTable2TestingTable1 时需要涵盖的三种情况。而 TestingTable1是MAIN表,总是需要通过它进行比较,所以 TestingTable1中的数据总是准确的。

    因此,考虑到上面的示例,如果不匹配其中一个或两个,我需要显示这样的结果- TestingTable1 数据然后在相同的 TestingTable2 数据旁边,以便我可以看到与 TestingTable1 相比, TestingTable2 中有什么值
    BUYER_ID   |   ITEM_ID       |    CREATED_TIME           |      USER_ID   |     PRODUCT_ID     |     LAST_TIME   
    -----------+-----------------+---------------------------+----------------+--------------------+-----------------------
    1345653 151851771618 2012-07-09 19:57:33 1345653 150851771618 2012-07-09 19:57:33
    1345653 110909316904 2012-07-09 21:29:06 1345653 110909316904 2012-07-09 22:29:06
    1345653 221065796761 2012-07-09 19:31:48 1345653 221165796761 2012-07-09 12:31:48

    所以我写了一个查询,我认为它会涵盖我所有的三个场景,但只有它涵盖 First Two 而不是 Third One 。我很困惑我们是否可以实现这第三种情况?
    SELECT * 
    FROM(
    SELECT *
    FROM TestingTable1 A
    JOIN TestingTable2 B ON A.BUYER_ID = B.USER_ID AND B.LAST_TIME = A.Created_TIME
    WHERE B.PRODUCTID <> A.ITEM_ID
    UNION ALL
    SELECT *
    FROM TestingTable1 A
    INNER JOIN TestingTable2 B ON A.BUYER_ID = B.USER_ID AND B.PRODUCTID = A.ITEM_ID
    WHERE B.t1time <> A.Created_TIME
    ) X

    任何建议将不胜感激。

    更新:-

    只是快速更新我最初想做的事情。因为我知道我的第三种情况很少有问题。

    首先在 TestingTable1 中,我正在按 BUYER_IDCREATED_TIME 对表进行排序(ORDER BY),并且与 TestingTable2 相同,我正在使用 USER_IDLAST_TIME 进行排序,并且我正在通过确保数据在给定日期属于 BUYER_IDUSER_ID 来进行比较。

    最佳答案

    with C as
    (
    select *
    from TestingTable1 A
    inner join TestingTable2 B
    on A.BUYER_ID = B.USER_ID and
    B.LAST_TIME = A.Created_TIME and
    B.PRODUCT_ID <> A.ITEM_ID
    union all
    select *
    from TestingTable1 A
    inner join TestingTable2 B
    on A.BUYER_ID = B.USER_ID and
    B.PRODUCT_ID = A.ITEM_ID and
    B.LAST_TIME <> A.CREATED_TIME
    )
    select *
    from C
    union all
    select *
    from TestingTable1 A
    inner join TestingTable2 B
    on A.BUYER_ID = B.USER_ID and
    A.CREATED_TIME <> B.LAST_TIME and
    A.ITEM_ID <> B.PRODUCT_ID
    where not exists (select *
    from C
    where A.BUYER_ID = C.BUYER_ID and
    A.ITEM_ID = C.ITEM_ID and
    A.CREATED_TIME = C.CREATED_TIME) and
    not exists (select *
    from C
    where B.USER_ID = C.USER_ID and
    B.PRODUCT_ID = C.PRODUCT_ID and
    B.LAST_TIME = C.LAST_TIME);

    SQL Fiddle

    关于sql - 连接两个表并从它们中获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428269/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com