【问题标题】:SQL - how to query two tables and return the results as one?SQL - 如何查询两个表并将结果作为一个返回?
【发布时间】:2018-02-03 00:29:36
【问题描述】:

长话短说,我有这个网站,其中“父母”级别的 cmets 存储在一个单独的表中,而不是他们的回复,称为“孩子” cmets。

为了生成所有最近评论的列表,我一直在做这样的事情:

SELECT
TOP 10 
 PC.ParentCommentText,
 PC.ParentCommentID,
 PC.ParentCommentTimeStamp
FROM
  ParentComments AS PC

我们称之为 Query1。

Query2 相同:

SELECT
TOP 10 
 CC.ChildCommentText,
 CC.ChildCommentID,
 CC.ChildCommentTimeStamp
FROM
  ChildComments AS CC

然后我使用联合并查询查询,这样我就可以一次遍历所有结果并显示最近的混合列表。

SELECT * FROM Query1
UNION 
SELECT * FROM Query2
ORDER BY ParentCommentTimeStamp DESC

我的问题从前两个查询开始——我只能从任一表返回某个数字才能开始。因此,如果某个线程跑掉并成为一个大讨论,则“子”cmets 的所有插槽都会被填满,您可能仍会看到几小时或几天前的“父”cmets,尽管它们不在最近。

我已经有一段时间没有做任何需要深入了解 SQL 的事情了。我知道有一种方法可以选择 Parent 和 Child cmets 作为一个,并且只需获取 __ 个结果,不管它们来自哪个表。

帮助?

【问题讨论】:

  • 注意 - 这也被标记为 Coldfusion。那是我为此努力的服务器端语言,我对不纯粹是 SQL 的解决方案持开放态度。虽然这是首选。
  • 你能展示一些示例数据和预期的结果吗?
  • 我只想合并两个表的结果,而不是将自己限制为例如每个表 10 个。我想要任何一个表中的所有结果,在一个查询对象中,只是按它们的时间戳排序。因此,如果我想要 20 个最近的 cmets,我可能会得到 18 个 Child cmets 和 2 个 Parents。现在,无论如何,我都会得到最近的 10 个。
  • 如何将子评论与其父评论关联起来?
  • 子评论表有一个父 ID 列,在发表评论时填写。

标签: sql sql-server sql-server-2012 coldfusion


【解决方案1】:

使用union all合并查询结果,稍后使用order by获取前n行。

SELECT TOP 10 WITH TIES *
FROM (SELECT ParentCommentText,ParentCommentID,ParentCommentTimeStamp as comment_timestamp
      FROM ParentComments 
      UNION ALL
      SELECT ChildCommentText,ChildCommentID,ChildCommentTimeStamp
      FROM ChildComments
     ) T
ORDER BY comment_timestamp DESC

【讨论】:

  • 宾果游戏!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多