在两列上加入postgres表?

时间:2013-07-04 09:26:42

标签: postgresql

我找不到直截了当的答案。我的查询是吐出错误的结果,我认为这是因为它没有将“AND”视为实际的连接。

你能做这样的事情,如果没有,那么正确的做法是什么:

SELECT * from X
LEFT JOIN Y
ON
  y.date = x.date AND y.code = x.code

3 个答案:

答案 0 :(得分:31)

这是可能的:

  

ON子句是最常见的一种连接条件:它采用与WHERE子句中使用的布尔值表达式相同的布尔值表达式。如果ON表达式的计算结果为真,则T1和T2中的一对行匹配。

http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-FROM

您的SQL看起来没问题。

答案 1 :(得分:26)

没关系。实际上,您可以将任何条件放在ON子句中,即使是一个 与关键列甚至表格无关,例如:

SELECT * from X
LEFT JOIN Y
    ON y.date = x.date
    AND y.code = x.code
    AND EXTRACT (dow from current_date) = 1

答案 2 :(得分:0)

此解决方案具有良好的性能:

select * from(
   select md5(concat(date, code)) md5_x from x ) as x1
left join (select md5(concat(date, code)) md5_y from y) as y1
on x1.md5_x = y1.md5_y