我正在尝试运行SQL查询以获取四个随机项。由于表中product_filter有多个toupleproduct我必须使用DISTINCTin SELECT,所以出现此错误:
对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
但是,如果我RANDOM()输入了SELECT它,将会避免DISTINCT结果。
有人知道如何DISTINCT与RANDOM()功能一起使用吗?以下是我有问题的查询。
SELECT DISTINCT p.id, p.title FROM product_filter pf JOIN product p ON pf.cod_product = p.cod JOIN filters f ON pf.cod_filter = f.cod WHERE p.visible = TRUE LIMIT 4 ORDER BY RANDOM();
您可以简化查询以避免先验问题:
SELECT p.cod, p.title FROM product p WHERE p.visible AND EXISTS ( SELECT 1 FROM product_filter pf JOIN filters f ON f.cod = pf.cod_filter WHERE pf.cod_product = p.cod ) ORDER BY random() LIMIT 4;
要点:
product
*LIMIT必须排在最后ORDER BY。
*我将WHERE简化 p.visible = ‘t’为p.visible,因为这应该是一个布尔列。