选择两个表的一些列,并选择FULL OUTER JOIN

时间:2018-05-24 08:25:07

标签: postgresql

我有两张桌子,他们只有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 个答案:

答案 0 :(得分:1)

请勿使用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;