代码之家  ›  专栏  ›  技术社区  ›  pleasedontbelong

有关外部联接的SQL查询帮助?

  •  1
  • pleasedontbelong  · 技术社区  · 14 年前

    我有两张这样的桌子。

    表1

    Column   |       Type       |
    ---------+------------------+
     cod     | text             |
     value99 | double precision |
    

    表2

    Column   |       Type       |
    ---------+------------------+
     cod     | text             |
     value06 | double precision |
    

    我想加入他们,所以我想

    Column   |       Type       |
    ---------+------------------+
     cod     | text             |
     value99 | double precision |
     value06 | double precision |
    

    问题是并非所有的代码都存在于这两个表中,所以如果其中一个表中不存在代码,则其值应为空。最后我想要这样的东西

    cod      |      value99     |      value06     |
    ---------+------------------+------------------+
     1       |     10           |       20         |
     2       |     13           |      NULL        |
     3       |     NULL         |        15        |
    

    我认为不可能使用左连接或右连接。或者可能是…有什么想法吗?THX=)

    编辑: 我尝试了完全外部联接,但结果是

    code    value  code    value
    1       10     1    4
    2    15     NULL    NULL
    NULL NULL 3 36
    

    回答!!!!: 我找到了@tobiasoptenbrouw的答案:

    SELECT test1.code,test1.value,test2.value FROM public.test1 LEFT OUTER JOIN public.test2 ON test1.code=test2.code
    UNION
    SELECT test2.code,test1.value,test2.value FROM public.test1 RIGHT OUTER JOIN public.test2 ON test1.code=test2.code
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Tobiasopdenbrouw    14 年前

    我有点猜测,因为您的问题没有详细描述所需的输出,但是您可能需要一个帮助查询,它将为您创建一个包含所有代码的表(a UNION 2 SELECT 奎里斯)然后,此帮助器表可以 LEFT JOINED 到您的2个源表)。

    编辑:我自己也想到了(完整的)外部连接答案,但在阅读行与行之间的内容时,我不认为这才是OP真正需要的。当然,我可能是错的。

        2
  •  1
  •   Lieven Keersmaekers    14 年前

    使用A FULL OUTER JOIN .

    使用完全外部联接

    保留 包含的不匹配信息 结果中的行不匹配 连接,使用完整的外部连接。SQL 服务器提供完整的外部联接 运算符,完全外部联接,其中 包括两个表中的所有行, 不管对方是否 表具有匹配的值。

    考虑产品表的联接 和上的SalesOrderDetail表 它们的productID列。结果 仅显示有销售的产品 命令他们。ISO全外部 join运算符指示所有行 从这两个表中 不管结果如何 表中有匹配的数据。

    可以将WHERE子句与 完全外部联接只返回 没有匹配数据的行 在桌子之间。以下 查询只返回那些 也没有匹配的销售订单 因为那些销售订单 与产品匹配(尽管全部 在这种情况下,销售订单是 与产品匹配)。

        3
  •  1
  •   kristof    14 年前
    select 
        coalesce(t1.cod, t2.cod)
        ,t1.value99
        ,t2.value06
    from 
        table1 t1 
        full outer join table2 t2 on t1.cod= t2.cod