【发布时间】:2019-04-20 03:14:08
【问题描述】:
我的表coordinates是:
id (PK) SERIAL, address (VARCHAR), city (VARCHAR), latitude (VARCHAR), longitude (VARCHAR)
我有一个包含 10,000 个地址的列表,如果该地址存在于表中,我将遍历这些地址以检索相应的纬度/经度。
SELECT 查询看起来像:
SELECT ADDRESS, CITY, LATITUDE, LONGITUDE FROM coordinates WHERE address = ? AND city = ?
然后我检查结果集以查看是否有匹配项。其他 9,999 个地址然后通过上面的查询循环,这需要太长时间。
有没有办法创建一个包含所有 10,000 个地址的查询并返回一个包含 4 列的结果集:|address|city|latitude|longitude|
任何未找到的地址在该结果集列中都应该有一个空的(0 或 null)纬度/经度值。我假设我可以循环结果集以识别任何遗漏的内容,这比 10,000 条语句要快得多。
最好的方法是什么?
【问题讨论】:
-
你为什么同时做
=和LIKE?条件x LIKE '%FOO%'包括所有x = 'FOO'为真的记录。 -
“我正在执行 10,000 次 SELECT 查询” 但您也说 “这里是其中的 1/4” 并显示了一个带有 3 SELECT 的语句子句,所以如果 3 是 1/4,那么你正在执行 12 个 SELECT 查询,而不是 10,000 个。
-
不,你误会了,这可能是我的错。我会改写它:
SELECT涉及UNION的查询是 12 个查询....但它的目的是在我的表中找到一个地址/坐标匹配。就像我解释的那样,这 12 个查询解释了地址的差异。我有10,000 addresses每个将通过 12 查询SELECT/UNION块。明白了吗? -
因此,与其循环所有 10,000 个地址并单独将它们的地址/城市放入 SELECT/UNION 查询中...我想要一个包含所有 10,000 个地址的查询,因此速度要快得多。
标签: java postgresql