【问题标题】:`ORDER BY` and `LIMIT` combined with `JOIN``ORDER BY` 和 `LIMIT` 结合 `JOIN`
【发布时间】:2013-06-18 21:38:37
【问题描述】:

我有一个这样的sql语句:

$sql = "SELECT *, films.category AS filmCategory FROM films LEFT OUTER JOIN items ON items.unique = films.ref ORDER BY unique ASC LIMIT 0, 4";

这行不通。它可以在没有 ORDER BYLIMIT 部分的情况下工作,如下所示:

$sql = "SELECT *, films.category AS filmCategory FROM films LEFT OUTER JOIN items ON items.unique = films.ref";

我似乎找不到添加ORDER BYLIMIT 以仅从films 表中获取前4 项的方法。连接的部分只应该在之后从另一个表中获取这四个项目的更多信息。如何以正确的方式完成?

【问题讨论】:

  • LIMIT 子句适用于整个查询,而不仅仅是films 表。如果您只想限制该表,则必须使用子查询。

标签: mysql sql sql-order-by limit


【解决方案1】:

如果要限制特定的表,则必须使用子查询。

SELECT *, films.category AS filmCategory
FROM (SELECT *
      FROM films
      ORDER BY ref ASC
      LIMIT 4) films
LEFT OUTER JOIN items
ON items.`unique` = films.ref
ORDER BY `unique` ASC

【讨论】:

  • 谢谢。我无法完成这项工作。为什么括号后面又写了films
  • @Steeven 。 . .这是子查询的别名。它使用与表相同的名称,因此查询的其余部分中的引用不必更改。
  • 如果我删除最后一句ORDER BY 'unique' ASC,我可以让你的代码工作。奇怪的是它不适用于这条线; filmsitems 两个表都有 unique 列。
  • 如果我将最后一句更改为ORDER BY films.'unique' ASC,它似乎可以工作。它显然也需要这里的表标识符。感谢您的回答。
  • 当然,如果一个列出现在多个表中,就得去歧义了。由于您没有发布您的架构,因此我不知道会重复这样一个不寻常的列名(现在我怀疑您使用 unique 作为大多数会调用 id 的列)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多