【问题标题】:Using LIMIT Statement in INNER JOIN (postgreSQL)在 INNER JOIN (postgreSQL) 中使用 LIMIT 语句
【发布时间】:2021-08-07 10:39:00
【问题描述】:

我在使用 LIMIT 语句时遇到问题。我将衷心感谢您的帮助。 我正在尝试 INNER JOIN 三个表并使用 LIMIT 语句只查询几行,因为这些表非常大。

所以,基本上,这就是我想要完成的:

SELECT *
FROM ((scheme1.table1
INNER JOIN scheme1.table2
ON scheme1.table1.column1 = scheme1.table2.column1 LIMIT 1)
INNER JOIN scheme1.table3
ON scheme1.table1.column1 = scheme1.table3.column1)
LIMIT 1;

我在第一个 INNER JOIN 的 LIMIT 上遇到语法错误。为什么?如何限制从每个 INNER JOINS 获得的结果。如果我只使用底部的第二个“LIMIT 1”,我会查询整个表。

非常感谢!

【问题讨论】:

  • 使用LIMIT 而不使用ORDER BY 是毫无意义的。您应该在问题中添加示例数据。
  • 您的“子查询”不包含SELECT...所以这不是子查询,而是 FROM 中不允许 LIMIT 的表表达式。使用完整的子查询 - 它会起作用。

标签: postgresql inner-join limit


【解决方案1】:

LIMIT 只能应用于查询,不能应用于表引用。因此,您需要对 table2 使用完整的 SELECT 查询,以便能够使用 LIMIT 子句:

SELECT *
FROM schema1.table1 as t1
  INNER JOIN (
     select *
     from schema1.table2
     order by ???
     limit 1
  ) as t2 ON t1.column1 = t2.column1 
  INNER JOIN schema1.table3 as t3 on ON t1.column1 = t3.column1
order by ???
limit 1;

请注意,没有ORDER BYLIMIT 通常没有意义,因为查询的结果没有固有的排序顺序。您应该考虑在派生表(也称为子查询)和外部查询中应用必要的ORDER BY,以获得一致且确定的结果。

【讨论】:

  • 非常感谢。我会马上尝试并报告!
  • 非常感谢您的帮助!成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2015-10-07
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多