PostgreSQL 查询不返回数据

Posted

技术标签:

【中文标题】PostgreSQL 查询不返回数据【英文标题】:PostgreSQL Query Not Returning Data 【发布时间】:2015-10-21 22:45:45 【问题描述】:

我有 2 个表(tabl1tbl2),我想要一个通过匹配 col1idcol2idtbl2 连接到 tbl1 的查询,以便结果集包含 tbl1 tbl2 中带有 name 列的数据。

以下查询不返回任何数据:

SELECT Date
   ,cast(tbl1.col1_id as varchar) AS "col1name"
   ,tbl2.name::varchar AS "tabl2name"
   ,tbl1.currency::money as "Avg currency"
   ,CASE WHEN rich IS NULL then 'Unknown'
         ELSE 'True' END AS "bank"
   ,CAST(Ranking AS FLOAT) / 18 + 1 AS "Rich Ranking"
   ,tbl1.Reviews as "Reviews"
 FROM tbl1 
  JOIN tbl2
    ON tbl1.col1id = tbl2.col2id

tbl1.col1id 包含像3,999,999 这样的数字

当我进行完全右连接时,我能够从 2 个单独的表中获取所有数据

我创建了一个新表,旁边有我想要的某些名称。

我创建了一个新表,其值与3,999,999 完全匹配,但最后我没有得到任何匹配,所以我认为类型有问题,我一直在搞乱数据,我我卡住了。

我猜这些值的类型不同,所以我做了一些额外的工作,将它作为整数或 varchar 在其他地方和同一个查询中输入。 但是结果什么都没有返回,但没有产生错误,所以我认为这是我的类型错误。

【问题讨论】:

步骤#1:删除所有演员表。他们没有任何目的,恕我直言 “金钱”类型太可怕了。躲开它。要存储数字,请将它们无格式存储(无逗号);使用 numeric 表示金额。 如果您担心这是类型问题,请粘贴 \d tbl1 和 \d tbl2 报告的列名称和类型,用于 col1id 和 col2id。如果它们相同,请粘贴以下 3 个查询的输出:select count(distinct col1id) from tbl1select count(distinct col2id) FROM tbl2select count(distinct col_id) FROM (select col1id AS col_id FROM tbl1 UNION select col2id AS col_id FROM tbl2) AS u 【参考方案1】:

如果您只是想做您在帖子中描述的事情,最好避免不必要的复杂性。以下是否返回任何内容?

SELECT tbl1.*, tbl2.name
FROM tbl1 
JOIN tbl2
ON tbl1.col1id = tbl2.col2id;

如果没有返回,我首先建议检查是否有任何与 tbl1.col1id 匹配的 tbl2.col2id。 您可以通过使用 LEFT JOIN 轻松做到这一点(通过使用 JOIN 的 atm 您实际上正在使用 INNER JOIN)。然后,您的行集将包含 tbl1 中的所有行,并且如果无法进行连接,则 tbl2.name 中的值为空。

除此之外,我会确保 tbl1.col1id 和 tbl2.col2id 的数据类型相同。

【讨论】:

以上是关于PostgreSQL 查询不返回数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 sqlalchemy 从 PostgreSQL 查询返回 Pandas 数据框

如何在 postgresql 中使用不同的返回数据执行多个选择查询?

GreenPlum/PostgreSQL 创建函数返回数据集

如何删除或更改postgresql上的cakephp分页计数查询?

PostgreSQL返回和sql元组描述不兼容

Postgresql:在不返回任何记录的视图上选择查询