无法在 Postgres 中连接两个有限制的表
Not able to join two tables with limit in Postgres
我有 table A 和 col1、col2、col3 和 Table B col1。
我想使用限制
加入两个 table
我想要像
这样的东西
select a.col1,a.col2,a.col3,b.col1
from tableA a, tableB b limit 5 and a.col1 between 1 AND 10;
所以我在 table b 中有 10 条记录,在 table a 中有 10 条记录。我应该通过限制 table b
中的 5 条记录来获得总共 50 条记录
为此,您需要派生 table(又名 "sub-query")。在派生table中,可以限制行数。
select a.col1, a.col2, b.col3, b.col1
from tablea a
join (
select b.col3, b.col1
from tableb
limit 5 -- makes no sense without an ORDER BY
) b on b.some_column = a.some_column --<< you need a join condition
where a.col1 between 1 and 10;
请注意,使用没有 ORDER BY
的 LIMIT
通常是没有意义的。
您的描述转换为 CROSS JOIN
:
SELECT a.col1, a.col2, a.col3, b.b_col1 -- unique column names
FROM tablea a
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb LIMIT 5 ) b;
-- WHERE a.col1 BETWEEN 1 AND 10; -- see below
... 和 LIMIT
for tableb
就像 a_horse 已经演示过的那样。 LIMIT
没有 ORDER BY
returns 任意行。结果可以从一次执行更改为下一次执行。
至select随机行来自tableb
:
...
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb <b>ORDER BY random()</b> LIMIT 5) b;
如果您的 table 是 大 考虑:
- Best way to select random rows PostgreSQL
当你...
have 10 records in ... table a
... 添加的 WHERE
条件对于获得 50 行来说要么是多余的要么是错误的。
虽然 SQL 允许,但具有多个同名结果列几乎没有意义。有些客户会立即抛出错误。使用列别名使名称唯一。
我有 table A 和 col1、col2、col3 和 Table B col1。
我想使用限制
加入两个 table我想要像
这样的东西select a.col1,a.col2,a.col3,b.col1
from tableA a, tableB b limit 5 and a.col1 between 1 AND 10;
所以我在 table b 中有 10 条记录,在 table a 中有 10 条记录。我应该通过限制 table b
中的 5 条记录来获得总共 50 条记录为此,您需要派生 table(又名 "sub-query")。在派生table中,可以限制行数。
select a.col1, a.col2, b.col3, b.col1
from tablea a
join (
select b.col3, b.col1
from tableb
limit 5 -- makes no sense without an ORDER BY
) b on b.some_column = a.some_column --<< you need a join condition
where a.col1 between 1 and 10;
请注意,使用没有 ORDER BY
的 LIMIT
通常是没有意义的。
您的描述转换为 CROSS JOIN
:
SELECT a.col1, a.col2, a.col3, b.b_col1 -- unique column names
FROM tablea a
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb LIMIT 5 ) b;
-- WHERE a.col1 BETWEEN 1 AND 10; -- see below
... 和 LIMIT
for tableb
就像 a_horse 已经演示过的那样。 LIMIT
没有 ORDER BY
returns 任意行。结果可以从一次执行更改为下一次执行。
至select随机行来自tableb
:
...
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb <b>ORDER BY random()</b> LIMIT 5) b;
如果您的 table 是 大 考虑:
- Best way to select random rows PostgreSQL
当你...
have 10 records in ... table a
... 添加的 WHERE
条件对于获得 50 行来说要么是多余的要么是错误的。
虽然 SQL 允许,但具有多个同名结果列几乎没有意义。有些客户会立即抛出错误。使用列别名使名称唯一。