1

我想在某个时间跨度内检索所有 ID。然而,时间戳存储在不同的表中:

Table A has column  my_id
Table B has columns my_id, timestamp

我想要类似的东西

SELECT
  id,
  time
FROM
  (SELECT my_id AS id FROM A) q1,
  (SELECT timestamp AS time FROM B WHERE my_id = id) q2
;

但是我怎样才能id在不同的子查询中得到值呢?这个问题有一个优雅的解决方案吗?

4

2 回答 2

1

我看到在第二个子查询中,您尝试链接两个表:

(SELECT my_id AS id FROM A) q1,
(SELECT timestamp AS time FROM B WHERE my_id = id) q2

如果两个 id 必须相等:

SELECT a.my_id as id, b.timestamp as time
FROM A a
JOIN B b ON (a.my_id = b.my_id);

我希望这有帮助。

于 2012-06-19T15:14:17.550 回答
1

更简单:

SELECT my_id AS id, b.my_ts
FROM   a
JOIN   b USING (my_id);
  • FROM A a(就像有人建议的那样)是胡说八道,因为我引用了手册

引用标识符也使其区分大小写,而未引用的名称总是折叠为小写。

  • 虽然在 PostgreSQL 中被允许,但类型名称timetimestamp是每个 SQL 标准中的保留字,不应用作标识符。

  • USING是一种句法速记,主要是.

于 2012-06-25T03:13:42.703 回答