【问题标题】:Extract all data in a query and some from another query提取查询中的所有数据和另一个查询中的一些数据
【发布时间】:2016-10-24 10:08:53
【问题描述】:

我有两个问题。

第一次查询

SELECT A.ID1, A.ID2, B.ID3, B.approved FROM A INNER JOIN B ON A.ID2 = B.ID2

这是结果:

ID1        ID2       ID3      approved
ABC        A01       B01        5
ABC        A01       B03        7
ABC        A01       B05        11
DEF        A02       B05        50
DEF        A02       B06        50

第二次查询

SELECT C.ID1, C.ID3, C.requested FROM C 

这是结果:

ID1        ID3     requested
ABC        B01        10
ABC        B02        20
ABC        B03        30
ABC        B04        40
ABC        B05        50
DEF        B02        99
DEF        B05        88
DEF        B01        77
DEF        B06        66

这是我的预期结果:

ID1        ID2       ID3    requested      approved
ABC        A01       B01       10             5
ABC        A01       B02       20             0
ABC        A01       B03       30             7
ABC        A01       B04       40             0
ABC        A01       B05       50            11
DEF        A02       B05       88            50
DEF        A02       B06       66            50
DEF        A02       B01       77             0

我的查询未显示预期结果:

    SELECT 
    C.ID1, C.ID3, C.requested,X.approved
FROM 
    C 
INNER JOIN (
            SELECT 
                A.ID1, A.ID2, B.ID3, B.approved 
            FROM 
                A
            INNER JOIN 
                B 
            ON 
                A.ID2 = B.ID2)X  
ON C.ID3 = X.ID3

编辑: 使用 Tim 解决方案时,结果如下:

    ID1        ID2       ID3    requested      approved
    ABC        A01       B01       10             5
    NULL       NULL      B02       20             0
    ABC        A01       B03       30             7
    NULL       NULL      B04       40             0
    ABC        A01       B05       50            11
    NULL       NULL      B02       99             0
    NULL       NULL      B01       77             0
    DEF        A02       B05       88            50
    DEF        A02       B06       66            50
    NULL       NULL      B01       77             0

当我使用 Order By 时,NULL 被分组。不知道哪个NULL属于哪个ID1或哪个ID2

【问题讨论】:

  • 加入所有 3 列
  • 我知道的任何联接操作都无法实现您的更新结果。
  • 为什么ABC B02 20出现在结果集中而不出现DEF B01 77
  • @TimBiegeleisen 啊,是的。 DEF B01 77 也应该出现。
  • 所以基本上,我想为未批准的项目显示已批准 = 0(未出现在第一个查询中)

标签: mysql join


【解决方案1】:

您当前的查询看起来几乎是正确的,只是它使用了INNER JOIN,它将删除来自C 的与您的第一个连接查询不匹配的记录。此外,C 和连接查询之间的连接条件是 ID1ID3 都应该匹配。试试这个:

SELECT t2.ID1,
       t2.ID2,
       t1.ID3,
       t1.requested,
       COALESCE(t2.approved, 0)
FROM C t1
LEFT JOIN
(
    SELECT A.ID1, A.ID2, B.ID3, B.approved
    FROM A INNER JOIN B
        ON A.ID2 = B.ID2
) t2
    ON t1.ID1 = t2.ID1 AND
       t1.ID3 = t2.ID3

【讨论】:

  • 有 NULL 值。如果有更多数据,当我使用 ORDER BY 时,将合并带有 NULLS 的行
  • NULL 值在列 ID1 和 ID2 中。此列应填写数据(ABC 和 A01)。
  • 您在寻找完全外连接吗?请显示代表实际问题的数据(您还没有这样做)。
猜你喜欢
  • 2020-09-11
  • 2021-03-01
  • 2017-09-30
  • 2019-07-26
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
相关资源
最近更新 更多