“ CAST”功能和“ DISTINCT ON”功能不会更改字段类型

时间:2018-07-12 09:00:07

标签: postgresql

我有两个表parent和child。我需要将这两个表合并在一起,然后将结果汇总到一个表中。 此pid(父表中的一列)可能具有重复的条目,并且pid的字段类型为VARCHAR。 但是子表中“ cid”的字段类型为INTEGER。

由于我需要不同的值,因此我在专利表查询中使用了DISTINCT ON。当我与儿童餐桌合并时 查询因字段类型不同(pid和cid)而引发错误。 我使用"DISTINCT ON" (CAST(pid AS INTEGER))使两个表的CAST相同。

但是pid的CAST不变。仍然显示错误。 当我使用"DISTINCT CAST(pid AS INTEGER))"而不是"DISTINCT ON"时,没有出现错误,但结果(行数)不正确。

我使用的查询

Select DISTINCT ON (pid) pid AS id,
first_name
last_name AS last_name,
email AS email
from parent where pid IS NOT NULL

UNION

Select cid  AS id,
child_first_name AS first_name,
child_last_name AS last_name,
child_email AS email
from child where cid IS NOT NULL

是否有人想在“ DISTINCT ON”上使用“ CAST”功能。

1 个答案:

答案 0 :(得分:1)

  

DISTINCT ON (CAST(pid AS INTEGER)) pid AS id

这将为pid计算而不是结果转换DISTINCT值。

假设您不需要强制转换值就可以在其上进行DISTINCT,则应执行以下操作:

SELECT DISTINCT ON (pid) pid::INTEGER AS id,
...

UNION

SELECT cid,
...

,即在选择它时进行投射,而不是在DISTINCT计算中进行投射。如果您确实也需要将其投射到那里,那么只需在两个地方都进行投射。