我在2个不同的表上有两个独立的查询,我正试图将它们连接到一个查询中。这两个表位于相同的架构中。
我正在尝试形成一个查询,它将返回论坛中最新帖子的forumid,threadid和主题。我可以使用我在下面写的两个查询,但为了提高效率,如果可能的话,我更喜欢只使用一个。
以下是我的问题:
1>
SELECT forumid,threadid
FROM threadtable
WHERE modifieddate = (select max(modifieddate) from threadtable);
2>
SELECT subject
FROM messsagetable
WHERE modifieddate = (select max(modifieddate) from messsagetable);我已经尝试了一些解决方案,但似乎在原地踏步。如有任何建议,欢迎光临。版本是Postgres 8.1。
发布于 2013-05-21 00:43:39
SELECT * FROM
(SELECT forumid,threadid
FROM threadtable
WHERE modifieddate = (SELECT MAX(modifieddate) FROM threadtable)) a,
(SELECT subject
FROM messsagetable
WHERE modifieddate = (SELECT MAX(modifieddate) FROM messsagetable)) b将第一个结果与第二个结果组合在一起。
SELECT * FROM
(SELECT forumid,threadid, modifieddate
FROM threadtable
WHERE modifieddate = (SELECT MAX(modifieddate) FROM threadtable)) a
INNER JOIN
(SELECT subject, modifieddate
FROM messsagetable
WHERE modifieddate = (SELECT MAX(modifieddate) FROM messsagetable)) b
ON a.modifieddate = b.modifieddate将第一个中的所有结果与第二个中具有相同修改日期的所有结果合并。
由于两个查询都只返回一个结果,因此您很可能需要第一个建议。
发布于 2013-05-21 00:46:48
要无条件地合并结果,请使用CROSS JOIN
SELECT *
FROM (
SELECT forumid, threadid
FROM threadtable
ORDER BY modifieddate DESC
LIMIT 1
) t
CROSS JOIN (
SELECT subject
FROM messsagetable
ORDER BY modifieddate DESC
LIMIT 1
) m我用更快、更简单的ORDER BY / LIMIT 1修改了基本查询。如果任一表中有多个行共享最大modifieddate,则将选取任意行。
在评论后更新
然而,modifieddate字段在两个表中,对于我试图检索的条目,它将是相同的。
这是一个糟糕的设计。您需要当前版本的Postgres,并且需要重新考虑您的数据库布局。
到目前为止,上面的查询仍然执行请求的工作--一旦你得到了正确的表名。
https://stackoverflow.com/questions/16653828
复制相似问题