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

选择两个表中的一些列并完全外部联接它们

  •  0
  • mahan  · 技术社区  · 6 年前

    我有两张桌子,他们只有一张 id 常见的。我想把它们全部连接起来。

    SELECT *
    FROM message m
    FULL OUTER JOIN
      (SELECT id, result, start, finish, message
       FROM  message_execution) ex ON ex.id = m.id
    WHERE  m.id = '1626'
    

    以上说法似乎有效。但是,我只需要第一个表的几列。我试图指定列名,但它不起作用。如何只选择 message 我需要的?

    1 回复  |  直到 6 年前
        1
  •  1
  •   a_horse_with_no_name    6 年前

    不使用 select * -选择所需的列:

    select m.col_1, m.col_2, 
           ex.*
    from message m 
      full outer join (
        select id, result, start, finish, message
        from message_execution
      ) ex on ex.id = m.id
    where m.id = 1626;
    

    或者您可以将其简化为:

    select m.col_1, m.col_2, 
           ex.id, ex.result, ex.start, ex.finish, ex.message
    from message m 
      full outer join message_execution ex on ex.id = m.id
    where m.id = 1626;
    

    如果 id 定义为数字,不应将其与字符串常量进行比较。 '1626' 是字符串常量, 1626 是一个数字。


    注意你 where 条件 message 表本质上将完全联接转换为 左边 连接,因此上面的内容相当于:

    select m.col_1, m.col_2, 
           ex.id, ex.result, ex.start, ex.finish, ex.message
    from message m 
      left outer join message_execution ex on ex.id = m.id
    where m.id = 1626;