有一种优雅的方式来做到这一点:
SELECT Cols from MyTable WHERE
zip = 90210 OR
zip = 23310 OR
zip = 74245 OR
zip = 77427 OR
zip = 18817 OR
zip = 94566 OR
zip = 34533 OR
zip = 96322 OR
zip = 34566 OR
zip = 52214 OR
zip = 73455 OR
zip = 52675 OR
zip = 54724 OR
zip = 98566 OR
zip = 92344 OR
zip = 90432 OR
zip = 91532 OR
...
(这篇文章中的邮政编码是虚构的,与生活或死亡的实际邮政编码没有任何相似之处)
答案 0 :(得分:28)
是:尝试此sql查询。
Select cols from MyTable where zip in (90210, 23310, ... etc.)
答案 1 :(得分:17)
取决于“优雅”的定义:)
但是,有了这么多邮政编码,我想你也可能想在数据库中管理它们。
您如何确定要匹配的邮政编码?
因此,您可以将邮政编码放在自己的表格中并执行
SELECT cols FROM MyTable, ZipTable WHERE MyTable.zip = ZipTable.zip
答案 2 :(得分:10)
或两者的组合,嵌套查询:
SELECT cols FROM MyTable WHERE zip IN
(SELECT zip FROM ZipTable WHERE condition=true)
答案 3 :(得分:3)
我会使用类似的东西:
start transaction;
create temporary table if not exists ZIPS(ZIP integer) storage=memory;
insert into ZIPS (ZIP) VALUES(...)
select COLS from MYTABLE M, ZIPS Z where Z.ZIP = M.ZIP
drop table ZIPS
(或截断它或做任何你想做的事)commit
或rollback
在每个db API中,您应该有一些 executemany 函数的变体,它可以使用多个值行调用insert into TABLE(COLUMNS) VALUES
并且比重复单个插入更快。你可以在一些函数中包含这样的调用序列,以便于重用,因为带有一个INT列的临时表通常很方便: - )
这样可以避免最大SQL查询长度问题(例如MySQL)的问题,并且您的查询有效,干净,易于维护或进一步扩展。
答案 4 :(得分:0)
有了这么多项,你真的应该创建一个查找表,特别是如果你需要在其他代码段中定期搜索它们。这将封装您的代码,如果它用于多种功能并更好地阅读美学,则可以更轻松地进行编辑。
实施例: - 在这种情况下,使用您的邮政编码集创建表格查找和填充列值
SELECT Cols
FROM MyTable
WHERE EXISTS (Select * FROM Lookups WHERE MyTable.zip = Lookups.values)
使用JOIN
SELECT DISTINCT Cols
FROM MyTable JOIN
Lookups ON MyTable.zip = Lookups.values