Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 两行之间的联接表条件_Sql_Postgresql_Postgresql 9.1 - Fatal编程技术网

Sql 两行之间的联接表条件

Sql 两行之间的联接表条件,sql,postgresql,postgresql-9.1,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 | 1390957

是否可以联接这些表:

日志表:

+--------+---------------+------------+
| 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 |
+---------+--------------+---------+---------------+------------+
可能吗? 特别是,如果第一个表是某个查询的结果


更新

对不起,这个错误。我想在日志中找到下订单的人。所以orders表通过创建的字段与logs表关联,即


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

没有任何东西可以将这两个绑定在一起。 两个表中都不存在ID或其他列

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


亲切的问候

只要你能使用联合

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

这将导致非等联接,性能非常差:

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

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

您希望看到什么?答案甚至没有错。您可以自己尝试查询,看看会发生什么。该语句将不起作用(union的第一部分有两列,第二部分有三列)。不,union all还要求两个select语句具有相同的列数。除此之外:即使这样做有效,也不是OP想要的。这两组数据应该如何相互关联?你用什么逻辑得出结果?我更新了我的问题。对不起,我犯了这个错误
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)