我找不到直截了当的答案。我的查询是吐出错误的结果,我认为这是因为它没有将“AND”视为实际的连接。
你能做这样的事情,如果没有,那么正确的做法是什么:
SELECT * from X
LEFT JOIN Y
ON
y.date = x.date AND y.code = x.code
答案 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