我有两个表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”功能。
答案 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
计算中进行投射。如果您确实也需要将其投射到那里,那么只需在两个地方都进行投射。