【发布时间】:2018-12-02 18:10:08
【问题描述】:
我在 pl/pgsql 函数中有这个查询。我正在使用 PostgreSQL 10。
FOR firstrecord IN
EXECUTE format(
'SELECT vans.id as vid, adidas.id as aid,
vans.color, adidas.color, vans.type, adidas.type
FROM shoes
FULL JOIN adidas ON shoes.id = adidas.id
FULL JOIN shoes ON shoes.id=vans.id
WHERE adidas.code = 607 and vans.code = 304 ' )
USING acode , vcode
END LOOP;
这可行,但我想在 vans.id 上强制执行 SELECT DISTINCT 和
adidas.id。
这是我得到的最接近的
FOR firstrecord IN
EXECUTE format(
'SELECT DISTINCT ON (adidas.id) vans.id as vid, adidas.id as aid,
vans.color, adidas.color, vans.type, adidas.type
FROM shoes
FULL JOIN adidas ON shoes.id = adidas.id
FULL JOIN shoes ON shoes.id=vans.id
WHERE adidas.code = 607 and vans.code = 304
ORDER BY adidas.id,vans.id' )
USING acode , vcode
END LOOP;
如果我尝试执行SELECT DISTINCT ON (adidas.id, vans.id) 之类的操作,DISTINCT 不起作用,我会得到重复的结果。
如果我这样做 SELECT DISTINCT vans.id as vid, adidas.id as aid ,仍然 DISTINCT 不起作用,我会得到重复的结果。
我该如何解决这个问题?
谢谢
【问题讨论】:
-
请Edit您的问题并添加一些sample data 和基于该数据的预期输出。 Formatted text 请no screen shots。 edit 您的问题 - 请不要在 cmets 中提供邮政编码或其他信息。
-
可能有更好的解决方案,但请先澄清一些问题:您的
FROM列表中有两次shoes。第二个是错字,应该是vans?在编辑您的问题时,还请解释查询应该实现什么,以及为什么您使用带有EXECUTE的动态SQL,这似乎没有必要。您甚至没有引用USING子句中提供的参数,即使您这样做也不需要动态 SQL ...
标签: postgresql group-by sql-order-by distinct plpgsql