我有一个MS SQL数据库,有大约2,600条记录(计算机上每一条信息。)我需要编写一个SELECT语句来选择大约400条记录。
当他们没有任何共同标准时,最好的方法是什么?它们都是不同的随机数,所以我不能使用通配符或类似的东西。我只需要在查询中手动包含所有400个数字吗?
答案 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子句。