当前位置: 首页 > 知识库问答 >
问题:

从一个表中组合多个选择查询结果

司徒鸿文
2023-03-14

我的表坐标是:

ID (PK) SERIAL, 地址 (VARCHAR), 城市 (VARCHAR), 纬度 (VARCHAR), 经度 (VARCHAR)

我有一个包含10,000个地址的列表,如果地址存在于表中,我将循环访问该列表以检索相应的纬度/经度。

SELECT查询如下所示:

选择地址,城市,纬度,经度 从坐标中地址= ?城市 = ?

然后我检查结果集,看看是否有匹配。然后通过上面的查询循环其他9,999个地址,这花费的时间太长了。

是否有一种方法可以创建一个包含所有10000个地址的查询,并返回一个包含4列的结果集:|地址|城市|纬度|经度|

任何未找到地址在结果集列中都应该有一个空(0或null)纬度/经度值。我假设我可以循环结果集来识别遗漏的内容,这比10,000条语句要快得多。

最好的方法是什么?

共有2个答案

宰父嘉胜
2023-03-14

对于 10,000 对,查询长度可能是一个问题。另外,如果您绝对需要一次点击即可完成,则可以尝试此操作。

将值插入到临时表中。然后:

SELECT tbl.val1, tbl.val2
FROM tbl
WHERE (tbl.val1, tbl.val2) in (select tmp_table.val1, tmp_table.val2 from tmp_table);

也可以是JOIN,而不是IN。

更新:

(1)插入必须是每行一个。可能会创建一个脚本文件,并提交一些内容;语句在几百行中出现一次。如果它是从Java中完成的,你可以使用JDBC addBatch在500/1000行中提交一次。

--Create temp table before this with two columns address (VARCHAR), city (VARCHAR)
INSERT INTO TMP_TABLE VALUES ( ?, ?); //Prepare statement and addBatch

(2, 3, 4)

SELECT ADDRESS, CITY, LATITUDE, LONGITUDE
FROM coordinates
WHERE (ADDRESS, CITY) in (select tmp_table.address, tmp_table.city from tmp_table);
隗轶
2023-03-14

UPDATE:更改为在结果中包含不匹配的“查询”地址,并添加了QUERY_ID以帮助识别“查询”地址,该地址可能只是提供查询参数的列表中的索引。

由于是PostgreSQL,您可以使用VALUES子句,例如。

sql prettyprint-override">SELECT q.QUERY_ID
     , c.ADDRESS
     , c.CITY
     , c.LATITUDE
     , c.LONGITUDE
  FROM (VALUES (1, ?, ?)
             , (2, ?, ?) // repeat as many times as needed
             , (3, ?, ?)
       ) AS q (QUERY_ID, ADDRESS, CITY)
  LEFT JOIN coordinates AS c
       ON  c.ADDRESS LIKE q.ADDRESS
       AND c.CITY LIKE q.CITY

现在您需要遍历10000个地址并设置该Presared语句的所有值。

 类似资料:
  • 问题内容: 我有桌子: 我想写一个返回BookName,FirstName,LastName,RubricName的SELECT查询。 我有两个单独的查询,但我不知道如何在一个选择中编写此查询。这就是我得到的: 它工作正常,但如何在一个选择中编写? 我尝试这样做,但是不起作用: 它返回错误: 问题答案: 试试这个查询

  • 我有一个Laravel后端和一个VueJS前端。 我试图在一个具有hasOne关系的模型上生成一个查询,但只从关系中选择特定的列,做一个sum和一个group By。 null

  • 我试图从获取数据。总共有9个表格,我必须相应地从所有表格中显示产品列表。 我考虑过使用连接,并尝试了左连接,如下所示: 这里是主表,pid是从tbl2到tbl9的所有表的。 注意:这里我在所有表上使用了来避免长查询,但是在实际的数据库操作中,只提到特定的列来提高性能。 现在实际的问题是,我没有得到所有的记录从表使用左加入。只检索中对应的每个条目的最后一行。 我使用了GROUP BY来避免重复的左连

  • 问题内容: 我有两个表,一个“公司”和一个“员工”: 我想在表中列出每个员工,并在其旁边列出公司。通过调用并在模板循环中通过并调用,这非常简单。 该解决方案的问题在于,将为循环中的每个项目创建一个新查询。因此,对于每个员工,公司都会有一个查询,看起来像这样: 相反,我希望最初在获取雇员的同一查询中加入此联接。像这样: Django QuerySet是否可能?如果没有,有没有办法可以解决此问题(没有

  • 问题内容: 我想根据URL字符串选择一些ID,但对于我的代码,它仅显示第一个。如果我写手册的ID是伟大的。 我有这样的网址http://www.mydomain.com/myfile.php?theurl=1,2,3,4,5(ids) 现在在myfile.php中,我有sql连接,并且: 如果我使用这个: 我得到正确的结果。现在,如果我使用下面的代码,它将无法正常工作: 有什么建议? 问题答案:

  • 我有一个elasticsearch索引用于存储关于人的信息。为了找到特定的人,我有一些查询,每个查询都单独工作,但是当我使用Bool查询将它们组合起来时,我会得到一个错误。 其中一个查询是对名称的模糊搜索 另一个查询用于搜索在特定日期范围内出生的人 现在我想组合这两个查询。我的bool查询: 虽然当我单独使用它们时,这两个查询都工作得很好,但当把它们组合起来时,我会得到一个错误。我的索引中有名字是