无法在Postgres中加入两个限制表

问题描述 投票:0回答:2

我有表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条记录

sql postgresql join limit
2个回答
0
投票

你需要一个派生表(也就是“子查询”)。在派生表中,您可以限制行数。

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;

请注意,使用没有LIMITORDER BY通常没有任何意义。


2
投票

您的描述转换为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一样tableb就像a_horse已经证明的那样。没有LIMITORDER BY返回任意行。结果可以从一次执行变为另一次执行。

要从tableb中选择随机行:

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

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

当你 ...

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

...添加的WHERE条件要么是冗余要么是错误才能获得50行。

虽然SQL允许它,但是拥有多个同名结果列很少有意义。有些客户立即​​抛出错误。使用列别名使名称唯一。

© www.soinside.com 2019 - 2024. All rights reserved.