【问题标题】:Selecting TOP 4 records from multiple SQL Server tables. Using vb.net从多个 SQL Server 表中选择 TOP 4 记录。使用 vb.net
【发布时间】:2012-04-13 22:02:28
【问题描述】:

我有大约 4 个不同的表,它们的列名完全相同。我想做的是从按日期排序的所有这些表中选择前 4 条记录(因为日期是它们共享的列之一)。

我不断收到错误的陈述,无论是语法问题还是不明确的记录等。

基本上我的陈述类似于:

SELECT TOP 4 date, link, anchor, thumb FROM archive1, archive2, archive3, archive4 ORDER BY date DESC

很明显,我对所有这些东西都是新手。提前感谢您的任何帮助。

【问题讨论】:

    标签: sql-server vb.net


    【解决方案1】:

    您需要生成所有表的union,然后命令它们获得最后四个:

    SELECT TOP 4 date, link, anchor, thumb 
    FROM
    (
      SELECT date, link, anchor, thumb 
        FROM archive1
       UNION ALL
      SELECT date, link, anchor, thumb 
        FROM archive2
       UNION ALL
      SELECT date, link, anchor, thumb 
        FROM archive3
       UNION ALL
      SELECT date, link, anchor, thumb 
       FROM archive4 
    ) archive
    ORDER BY date DESC
    

    由于您只获取四条记录,您可以在每个查询中添加 TOP 4 子句以及 ORDER BY date DESC 以加快处理速度。

    【讨论】:

    • 假设第一个表至少有4条记录,这不是要确保“前4”总是来自第一个表吗?那么查询其他表没有意义......
    • 是的——你把“前四名”按顺序排列——我明白了。但是您不想将排序应用于您获得前4 名之前的联合集吗? (以确保所有表都发挥作用,而不仅仅是第一个)
    • 这是正确的。 top 和 order-by 将一起工作。顶部将在订购后应用。
    • 漂亮,效果很好!谢谢。现在我有一个跟进,也许我应该为它提出一个不同的问题。我想将前 4 行中的每一行的这 4 列中的每一列加载到标签中。我尝试声明一个数据读取器并执行读取器,但由于项目 dr.item(4) 在数组之外,因此 dr 只产生 4 个项目。每个项目是所有四列的组合吗?
    • 不客气。是的,一个新问题会很好地让事情井井有条:-)
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多