连接2行之间的表条件

时间:2014-01-30 08:54:42

标签: sql postgresql postgresql-9.1

是否可以加入这些表格:

日志表:

+--------+---------------+------------+
| name   | ip            | created    |
+--------+---------------+------------+
| 408901 | 178.22.51.168 | 1390887682 |
| 408901 | 178.22.51.168 | 1390927059 |
| 408901 | 178.22.51.168 | 1390957854 |
+--------+---------------+------------+

订单表:

+---------+------------+
| id      | created    |
+---------+------------+
| 8563863 | 1390887692 |
| 8563865 | 1390897682 |
| 8563859 | 1390917059 |
| 8563860 | 1390937059 |
| 8563879 | 1390947854 |
+---------+------------+

结果表将是:

+---------+--------------+---------+---------------+------------+
|orders.id|orders.created|logs.name| logs.ip       |logs.created|
+---------+--------------+---------+---------------+------------+
| 8563863 | 1390887692   | 408901  | 178.22.51.168 | 1390887682 |
| 8563865 | 1390897682   | 408901  | 178.22.51.168 | 1390887682 |
| 8563859 | 1390917059   | 408901  | 178.22.51.168 | 1390887682 |
| 8563860 | 1390937059   | 408901  | 178.22.51.168 | 1390927059 |
| 8563879 | 1390947854   | 408901  | 178.22.51.168 | 1390927059 |
+---------+--------------+---------+---------------+------------+

有可能吗? Espessialy,如果第一个表是某些查询的结果。


更新

抱歉这个错误。我想在日志中找到订单。因此,订单表与创建字段的日志表相关,即

第一行有条件(orders.created> = log.created)

3 个答案:

答案 0 :(得分:1)

没有什么可以将这两个绑定在一起。 两个表中都没有ID或其他列。

如果是这种情况,您可以在存储过程中加入这两个表。 在您询问第一个查询时,将数据存储在新创建的表中,在连接中使用它以获取结果并在之后将其删除。

亲切的问候

答案 1 :(得分:1)

这会导致非等级连接,表现糟糕:

SELECT *
FROM t2 JOIN t1
ON t1.created = 
 (
   SELECT MAX(t1.created) 
   FROM t1 WHERE t1.created <= t2.created
 ) 

你可能最好使用基于这样的UNION的游标(你可能需要添加一些类型转换以获得工作的UNION):

SELECT *
FROM
 (
   SELECT NULL AS name, NULL AS ip, NULL AS created2, t2.*
   FROM t2
   UNION ALL
   SELECT t1.*, NULL AS id, NULL AS created
   FROM t1
 ) AS dt
ORDER BY COALESCE(created, created2)

现在,您可以按正确的顺序处理行,并记住最后一行t1行中的行。

答案 2 :(得分:-1)

只需使用 union

即可
select id, created from table_2
union all
select name, ip, created from table_1