Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在postgresql中忽略select distinct的列?_Postgresql_Union_Distinct - Fatal编程技术网

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

如何在postgresql中忽略select distinct的列?,postgresql,union,distinct,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

大家好

我有一个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"
这是我的SQL

你需要更多的信息吗

谢谢

只需将您的查询用作子查询,指定仅对
名称执行distinct即可


在distinct过程中进行限制和排序,否则distinct可能会丢弃重复,而不会按照正确的排序顺序放弃完整的10行。

这只是为了测试其工作原理,接下来是安全;-)你能告诉我注射在哪里吗?我现在在安全步骤;-)如果我将它添加到每个select中,不同的表将被选中,但在union中我有两个表。谢谢。。。但根本不起作用:-(我必须为子查询使用别名…选择Distinct…FROM(…)作为子查询名称顺序…现在它可以工作了
SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery
ORDER BY name LIMIT 10