PostgreSQL 查询不返回数据
Posted
技术标签:
【中文标题】PostgreSQL 查询不返回数据【英文标题】:PostgreSQL Query Not Returning Data 【发布时间】:2015-10-21 22:45:45 【问题描述】:我有 2 个表(tabl1
和 tbl2
),我想要一个通过匹配 col1id
和 col2id
将 tbl2
连接到 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 tbl1
、select count(distinct col2id) FROM tbl2
、select 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 创建函数返回数据集