如何在postgresql中忽略select distinct的列?

hel*_*lle 6 postgresql union distinct

大家好!

我有一个SQL(见上文),我想知道我怎么能确保我不会得到关于名称的双打.如果名称出现在第一个中选择它是主要名称,则应在以下选择中忽略.

"SELECT name, id, 'place' AS tablename FROM places WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'community' AS tablename FROM communities WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'district' AS tablename FROM districts WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'region' AS tablename FROM regions WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'province' AS tablename FROM provinces WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."ORDER BY name LIMIT 10"
Run Code Online (Sandbox Code Playgroud)

这是我的SQL.

你需要更多信息吗?

谢谢

Ben*_*n S 5

DISTINCT

SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery
ORDER BY name LIMIT 10
Run Code Online (Sandbox Code Playgroud)

只需指定name通过将查询用作子查询来区分.

在不同的期间执行限制和排序,否则不同的可能会丢弃欺骗并且不以正确的排序顺序放弃完整的10行.