首页 > 解决方案 > 无法在 Postgres 中加入两个有限制的表

问题描述

我有表 A 和 col1、col2、col3 和表 B col1。

我想使用限制加入两个表

我想要一些像

select a.col1,a.col2,a.col3,b.col1 
from tableA a, tableB b limit 5 and a.col1 between 1 AND 10;

所以我在表 b 中有 10 条记录,在表 a 中有 10 条记录。通过仅限制表 b 中的 5 条记录,我应该总共获得 50 条记录

标签: sqlpostgresqljoinlimit

解决方案


您的描述转换为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

...就像 a_horse 已经证明LIMIT的那样。不返回任意行。结果可以从一次执行更改为下一次执行。tablebLIMITORDER BY

要从中选择随机tableb

...
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb ORDER BY random() LIMIT 5) b;

如果您的桌子很大,请考虑:

当你 ...

在...表 a 中有 10 条记录

...添加的WHERE条件要么是多余的,要么是错误的,以获得 50 行。

虽然 SQL 允许这样做,但拥有多个同名的结果列几乎没有意义。一些客户端立即抛出错误。使用列别名使名称唯一。


推荐阅读