我有两个表(tabl1tbl2),我希望查询通过匹配tbl2tbl1col1id连接到col2id,以便结果集包含tbl1数据和name中的tbl2列。
以下查询不返回数据:

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的数字
当我执行完全右联接时,我可以从两个单独的表中获取所有数据
我创建了一个新表,旁边有我想要的名字。
我创建了一个新的表,其中的值与3,999,999完全匹配,但最后没有匹配,所以我认为类型有问题,而且我一直在处理数据,我陷入了困境。
我猜这些值不是同一类型的,所以我做了一些额外的工作,把它作为integer或varchar输入到其他地方和同一个查询中。
但是返回的结果是空的,但没有产生错误,所以我相信这是我这边的类型错误。

最佳答案

如果你只想做你在帖子里描述的,最好避免不必要的复杂性。下面的东西能退货吗?

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

如果什么都没有回来,我会首先建议检查是否有任何tbl2.col2id匹配tbl1.col1id。
您可以通过使用左连接(atm通过使用join您实际上使用的是内部连接)轻松地完成这一任务。然后,行集将包含来自tbl1的所有行,如果不可能进行联接,则在tbl2.name中有空值。
除此之外,我还要确保tbl1.col1id和tbl2.col2id的数据类型是相同的。

10-05 19:29