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)