无法在Postgres中限制两个表的连接

时间:2019-03-25 20:51:41

标签: sql postgresql join limit

我有带有col1,col2,col3和表B col1的表A。

我想使用限制加入两个表

我想要

之类的东西
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条记录

2 个答案:

答案 0 :(得分: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的{​​{1}}就像a_horse一样已经演示过。没有tableb的{​​{1}}返回任意行。结果可以从一个执行更改为下一个执行。

要从LIMIT中选择随机行:

ORDER BY

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

当你...

  

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

...添加的tableb条件要么多余,要么获取50行错误。

尽管SQL允许,但具有多个相同名称的结果列几乎没有意义。一些客户立即​​抛出错误。使用列别名使名称唯一。

答案 1 :(得分: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;

请注意,在没有LIMIT的情况下使用ORDER BY通常是没有意义的。