根据另一个表的字段值从数据库表中查找?

时间:2011-07-28 09:47:15

标签: mysql sql

我有两个数据库表:一个用于存储页面ID和其他元数据的pages表,以及一个存储页面标题和内容修订版的pages_revisions表。

在我的应用程序中,我有一个核心Pages控制器。我想修改这个控制器,以便它传递一个页面标题,然后控制器返回一个数据库记录,如果一个页面的最新版本标题匹配。

到目前为止,我有这个:

SELECT
    id, (
        SELECT title
        FROM pages_revisions
        WHERE page_id = pages.id
        ORDER BY created DESC
        LIMIT 1
    ) AS title, (
        SELECT content
        FROM pages_revisions
        WHERE page_id = pages.id
        ORDER BY created DESC
        LIMIT 1
    ) AS content
    FROM pages

但是使用此查询,我无法使用别名title列来执行WHERE查询;例如...WHERE title = 'Home'

如何修改上述查询以选择页面(及其最新标题),然后过滤这些结果?

2 个答案:

答案 0 :(得分:0)

我将在这个问题中回答这个想法;从SELECT语句中引用WHERE子句中的复杂计算。我不会重构查询,即使我可能会在现实场景中。

如果要使用相关子查询中的值,可以将整个查询包装在另一个查询中...
(注意,大多数omptimiser会理解这一点,而不是浪费时间在毫无意义的结果上。)

SELECT
  *
FROM
(
  your-query
)
  AS data
WHERE
  <conditions>

答案 1 :(得分:0)

在这个答案中,我将重构查询以完全避免这个问题。

相反,您可以在JOIN中使用相关的子查询来查找所需的记录...
(这假设page_revisions具有它自己的唯一标识符)

SELECT
  pages.id,
  page_revisions.title,
  page_revisions.content
FROM
  pages
LEFT JOIN
  page_revisions
    ON page_revisions.id = (SELECT TOP 1 id FROM page_revisions WHERE page_id = pages.id ORDER BY created DESC)
WHERE
  <conditions>