如何在SQL数据库中查询许多没有任何通用条件的结果?

时间:2009-04-20 03:26:40

标签: sql sql-server

我有一个MS SQL数据库,有大约2,600条记录(计算机上每一条信息。)我需要编写一个SELECT语句来选择大约400条记录。

当他们没有任何共同标准时,最好的方法是什么?它们都是不同的随机数,所以我不能使用通配符或类似的东西。我只需要在查询中手动包含所有400个数字吗?

9 个答案:

答案 0 :(得分:7)

如果您需要400个特定行,其列匹配特定数字:

是包含使用IN子句的所有400个数字。根据我的经验(通过代码分析),使用IN子句比使用column = A或column = B或...时更快

400真的不是很多。

SELECT * FROM table WHERE column in (12, 13, 93, 4, ... )

如果您需要400个随机行:

SELECT TOP 400 * FROM table
ORDER BY NEWID()

答案 1 :(得分:4)

不是执行多个查询或选择整个行集并自行过滤,而是创建临时表或永久表,在其中为每个ID插入临时行。在您的主查询中,只在临时表上join

例如,如果您的源表是......

person:
    person_id
    name

你有400个不同的person_id你想要的,假设我们有一个临时行的永久表,就像这样......

person_query:
   query_id
   person_id

您将行插入person_query,然后像这样执行您的查询..

select
    *

from person p

join person_query pq on pq.person_id = p.person_id

where pq.query_id = @query_id

答案 2 :(得分:2)

也许您发现数据库设计存在缺陷。也就是说,您想要的400条记录中有一些共同点,您需要的是数据库中的另一列以表示这种共性。然后,您可以选择此新列。

答案 3 :(得分:1)

正如Brian Bondy上面所说,使用IN语句可能是最好的方式

SELECT * FROM table WHERE column in (12, 13, 93, 4, ... )

一个好方法是从电子表格中粘贴ID,如果你有一个...

如果您想要的行的ID位于电子表格中,那么您可以在电子表格中添加一个额外的列,以便将CONCATENATES()逗号添加到ID的末尾,以便电子表格中的列看起来像这样:

12,
13,
93,
4,

然后将此列数据复制并粘贴到您的查询中,如下所示:

SELECT * FROM table WHERE column in (
12, 
13, 
93, 
4, 
... 
)

看起来并不漂亮,但它可以快速获取所有数字。

答案 4 :(得分:0)

您可以创建一个XML列表或类似的东西来跟踪您需要查询的内容,然后您可以编写一个查询,该查询将遍历该列表,从而将所有这些列表恢复。

Here是一个网站,其中包含许多以多种不同方法执行您要查找的内容的示例(#4是XML方法)。

答案 5 :(得分:0)

您可以创建一个包含400多个随机令牌的表格,然后选择这些令牌。如,

SELECT * FROM inventory WHERE inventory_id IN (SELECT id FROM inventory_ids WHERE tag = 'foo')

你仍然需要维护另一个表,但至少你没有一个巨大的查询。

答案 6 :(得分:0)

我会根据您的选择标准构建一个单独的表,然后将这些表连接在一起或类似的东西,假设您的标准当然是静态的。

答案 7 :(得分:0)

只需选择TOP n行,然后按随机顺序排序。

以下是返回10个随机员工姓名的假设示例:

   SELECT TOP 10
     EMP.FIRST_NAME
    ,EMP.LAST_NAME
   FROM  
     Schema.dbo.Employees EMP
   ORDER BY
     NEWID()

答案 8 :(得分:-1)

对于这种特定情况(不一定是一般解决方案),最快和最简单的事情可能是将整个SQL表读入内存并在程序代码中找到匹配,而不是让数据库解析一个巨大的where子句。